启用自动统计后的性能指标

DBA*_*Don 5 sql-server sql-server-2008-r2 metrics

精简版

在数据库上启用AUTO_CREATE_STATISTICS&后AUTO_UPDATE_STATISTICS_ASYNC,什么性能指标最能显示更改?

长版

我们刚刚意识到遗留系统的数据库从来没有打开过AUTO_CREATE_STATISTICS& AUTO_UPDATE_STATISTICS_ASYNCAUTO_UPDATE_STATISTICS被打开)。

正如您所期望的那样,在打开这些功能后,我们的应用程序的性能要好得多。响应时间明显缩短,用户无需等待屏幕刷新或页面加载。

数据库索引良好,我们已经在我们认为需要的地方手动创建了统计信息。启用后立即检查sys.stats(加入sys.stats_columns& sys.objects),它只需要在三个对象上创建统计信息。(我将这些记录下来,以防量化这些变化取决于它们。)

我在此服务器上捕获了大量性能数据,并且查看了更改之前和之后的数据,但我还没有确定实际收益在哪里。

我还有其他类似的系统,其中该数据库的自动统计功能仍处于关闭状态。这些系统也将从启用它们中受益,但我正在等待,以防有一些我还没有的指标,我可以在进行更改之前添加它。

我真正的问题

除了用户体验之外,我如何量化通过更改系统上的 Auto-Stats 设置所带来的增加?

Windows Server 2008 上的 SQL Server 2008R2。

Jos*_*ell 3

如果SET AUTO_CREATE_STATISTICS ON为最终用户提高了性能(传闻),则可能意味着在没有统计信息的列上使用谓词的查询获得了更好的执行计划,从而缩短了运行时间。“更好”的执行计划可能会带来以下一项或多项改进:

  • 更少的逻辑/物理读取
  • 降低CPU使用率
  • 更短的查询运行时间/持续时间

我不确定您正在捕获哪些指标。如果您能够达到单个查询执行时间的水平,您可以找到更改前后相同查询的示例,并确认它们减少了运行时间(或减少了 CPU 和读取等)。

例如,如果您将 的内容记录sys.dm_exec_query_stats到表中,sql_handle则在更改设置后,您可能会发现具有相同但较低 CPU、读取等的查询。


如果您正在记录执行计划 XML,您可能能够查找是否存在警告,然后是否不存在,如下所示:

无统​​计警告的屏幕截图

它在 XML 中显示如下:

  <Warnings>
    <ColumnsWithNoStatistics>
      <ColumnReference Database="[TestDB]" Schema="[dbo]" Table="[Hist]" Column="Num" />
    </ColumnsWithNoStatistics>
  </Warnings>
Run Code Online (Sandbox Code Playgroud)

如果您只查看服务器级别的聚合指标,您可能仍然会看到总体读取或 CPU 下降,但可能很难确定它是否被其他工作负载和维护活动冲淡了。