精简版
在数据库上启用AUTO_CREATE_STATISTICS
&后AUTO_UPDATE_STATISTICS_ASYNC
,什么性能指标最能显示更改?
长版
我们刚刚意识到遗留系统的数据库从未打开AUTO_CREATE_STATISTICS
& AUTO_UPDATE_STATISTICS_ASYNC
(AUTO_UPDATE_STATISTICS
已打开)。
如您所料,打开这些后,我们的应用程序的性能要好得多。响应时间明显更好,用户无需等待屏幕刷新或页面加载。
数据库索引良好,我们已经在我们认为需要的地方手动创建了统计信息。启用后我立即检查sys.stats
(加入sys.stats_columns
& sys.objects
),它只需要在三个对象上创建统计信息。(我已经记录了这些,以防量化这些变化取决于他们。)
我在这台服务器上捕获了很多性能数据,并查看了更改前后的数据,但我还没有确定实际收益在哪里。
我还有其他类似的系统,其中该数据库的自动统计仍然关闭。这些系统也将从启用它们中受益,但我正在等待以防有一些我还没有的指标,我可以在进行更改之前添加它。
我真正的问题
除了用户体验之外,我如何量化通过更改系统上的 Auto-Stats 设置所带来的增长?
Windows Server 2008 上的 SQL Server 2008R2。
如果
SET AUTO_CREATE_STATISTICS ON
为您的最终用户提高了性能(传闻),这可能意味着在没有统计信息的列上使用谓词的查询获得了更好的执行计划,从而缩短了运行时间。“更好”的执行计划可能会带来以下一项或多项改进:我不确定您要捕获哪些指标。如果您能够达到单个查询执行时间的水平,您可以在更改前后找到相同查询的示例,并确认它们减少了运行时间(或更少的 CPU 和读取等)。
例如,如果您将内容记录
sys.dm_exec_query_stats
到表中,您可以在更改设置后找到具有相同sql_handle
但较低 CPU、读取等的查询。如果您正在记录执行计划 XML,您可能能够查找是否存在这样的警告:
它在 XML 中显示如下:
如果您只需要查看服务器级别的聚合指标,您可能仍然会看到整体读取或 CPU 已下降,但如果它被其他工作负载和维护活动冲淡,可能更难确定它。