AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 74091
Accepted
Kris Gruttemeyer
Kris Gruttemeyer
Asked: 2014-08-16 05:14:09 +0800 CST2014-08-16 05:14:09 +0800 CST 2014-08-16 05:14:09 +0800 CST

针对临时工作负载进行优化

  • 772

我知道这个选项的作用以及如何启用它。我的问题是如果我启用它会发生什么。

无需提供太多信息,我们的会计系统是 Microsoft Dynamics 产品,它使用 VM、32GB RAM(SQL Server [2008 R2] 可用 28GB)。他们让他们的供应商来查看我们的配置,以解决会计团队已经看到的某些性能问题。他们甚至让另一个 DBA 来看看我们的配置。他的建议之一是“查看缺失的索引”。我们可以说几乎每个存在的 SQL 服务器实例,每个表都有一个唯一的非聚集索引,这不是我的选择,但我告诉我,对软件访问的表上的索引进行任何更改都可能导致问题小贩。他的第二个是启用“针对临时工作负载进行优化”。我'

通过针对临时工作负载进行优化,我知道单次使用计划存储为存根,整个计划实际上并没有保存在缓存中,直到计划运行两次。有了这样的系统,我们真的会看到任何形式的性能提升吗?根据 Kimberly Tripp 的文章,我运行了以下查询:

SELECT objtype AS [CacheType]
    ,count_big(*) AS [Total Plans]
    ,sum(cast(size_in_bytes AS DECIMAL(18, 2))) / 1024 / 1024 AS [Total MBs]
    ,avg(usecounts) AS [Avg Use Count]
    ,sum(cast((
                CASE 
                    WHEN usecounts = 1
                        THEN size_in_bytes
                    ELSE 0
                    END
                ) AS DECIMAL(18, 2))) / 1024 / 1024 AS [Total MBs - USE Count 1]
    ,sum(CASE 
            WHEN usecounts = 1
                THEN 1
            ELSE 0
            END) AS [Total Plans - USE Count 1]
FROM sys.dm_exec_cached_plans
GROUP BY objtype
ORDER BY [Total MBs - USE Count 1] DESC

这是我得到的结果:

在此处输入图像描述

现在,我们可以看到,我们有大约 1.7GB 的单次使用计划。可能值得打开此选项,因为该框有 28GB 可用于 SQL 服务器,对吧?好吧,我们正在谈论释放 1-1.25GB 的空间,因为存根仍然占用空间,只是没有那么多。我运行了一个查询来提取所有单次使用计划并获取它们的大小,我们最大的计划约为 1-1.5MB。

所以,这是我的问题(抱歉花了一段时间才真正解决这些问题):

  • 我们真的认为我们会在这里看到可衡量的性能提升吗?如果是这样,除了查看上面查询中使用的空间之外,我们如何量化它?
  • 可以理解的是,我犹豫在生产系统上使用这样的开关。我应该注意哪些影响?过程缓存会自行擦除并重建吗?开启此功能时,我应该注意哪些问题?
sql-server execution-plan
  • 1 1 个回答
  • 2079 Views

1 个回答

  • Voted
  1. Best Answer
    Sean Gallardy
    2014-08-16T05:32:13+08:002014-08-16T05:32:13+08:00

    克里斯,

    • 我们真的认为我们会在这里看到可衡量的性能提升吗?如果是这样,除了查看上面查询中使用的空间之外,我们如何量化它?

    这取决于,但我对你提供的数据的直觉是 - 不。当然,您可能会节省一些空间,因为计划存根仍会占用内存,只是不会那么多(与您的 1 MB 计划相比)。所以你会净记忆,我们明白了。但是,我们不知道这些计划中有多少是单次执行的,然后在某个时间点仍在缓存中时再次执行。这带来了关于编译/重新编译以及随之而来的 cpu 利用率的问题。如果您有足够的空间,那么这可能是一个微不足道的问题(双关语)。

    如果您的服务器没有受到内存压力,我不希望在“性能”方面看到太多改进,具体取决于您希望如何对其进行分类。如果您正在交换并且有一些轻微的内存压力,这可以暂时缓解它 - 尽管增加 VM 内存会以更快的实施速度产生相同的效果,而不会产生负面的副作用成本。

    • 可以理解,我不愿在生产系统上使用这样的开关。我应该注意哪些影响?过程缓存会自行擦除并重建吗?开启此功能时,我应该注意哪些问题?

    根据 BOL,它不会影响当前计划缓存中的任何内容:“将针对临时工作负载的优化设置为 1 只会影响新计划;已经在计划缓存中的计划不受影响。” http://msdn.microsoft.com/en-us/library/cc645587(v=sql.105).aspx

    您可能会看到计划编译的 cpu 命中的可能性(取决于最终的重用)(因为它必须执行两次,一次用于原始执行,然后一次用于存储它的第二次)。

    其他一些“奇怪”将包括监控工具,特别是如果它们正在获取执行计划,因为计划存根与它们没有任何关联。一些奇怪的结果可能来自那些期望始终存在关联的工具。

    我对 Dynamics 不是非常熟悉,但 IIRC,它有一个特定的 Microsoft 设置指南,如 SharePoint。我会仔细检查这不会使您对产品的支持无效。

    • 6

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve