【问题标题】:SQL Server :: when setup Optimize for Ad Hoc Workloads?SQL Server :: 设置时优化 Ad Hoc 工作负载?
【发布时间】:2021-01-27 21:10:02
【问题描述】:

我正在阅读一篇非常有趣的 post,关于如何设置针对 Ad Hoc 工作负载的优化。

帖子链接到 Pinal Dave 制作的 query,可让您检索 AdHoc %:

SELECT AdHoc_Plan_MB, 
       Total_Cache_MB, 
       AdHoc_Plan_MB * 100.0 / Total_Cache_MB AS 'AdHoc %'
FROM
(
    SELECT SUM(CASE
                   WHEN objtype = 'adhoc'
                   THEN CONVERT(BIGINT, size_in_bytes)
                   ELSE 0
               END) / 1048576.0 AdHoc_Plan_MB, 
           SUM(CONVERT(BIGINT, size_in_bytes)) / 1048576.0 Total_Cache_MB
    FROM sys.dm_exec_cached_plans
) T;

我的 AdHoc 百分比为 61%:

Pinal 说“我个人更喜欢在看到 AdHoc Percentages 在 20-30% 之间时打开 Optimize for Ad Hoc Workloads 设置

如果我有 61%,我该怎么办。

我应该打开还是关闭它?

【问题讨论】:

    标签: sql-server performance tsql caching


    【解决方案1】:

    我个人更喜欢在看到 AdHoc Percentages 介于 20-30% 之间时打开 Optimize for Ad Hoc Workloads 设置”

    这不足以表明启用此设置。 AdHoc 计划只是“指通过使用 osql 或 sqlcmd 而不是作为远程过程调用作为语言事件提交的 Transact-SQL”。 -sys.dm_exec_cached_plans

    重要的不是计划是否是 AdHoc,而是计划是否真正被重用。

    请遵循文档中的建议。重要的指标不是 AdHoc 计划的数量或它们使用的内存,而是一次性计划的数量:

    SELECT objtype, cacheobjtype, 
      AVG(usecounts) AS Avg_UseCount, 
      SUM(refcounts) AS AllRefObjects, 
      SUM(CAST(size_in_bytes AS bigint))/1024/1024 AS Size_MB
    FROM sys.dm_exec_cached_plans
    WHERE objtype = 'Adhoc' AND usecounts = 1
    GROUP BY objtype, cacheobjtype;
    

    optimize for ad hoc workloads - recommendations

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-06
      • 1970-01-01
      • 2015-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多