按日期“查找前5个查询”

时间:2015-05-20 09:56:07

标签: sql-server azure sql-server-2012 azure-sql-database

如何运行以下查询(来自this MSDN article)以确定最差查询(按CPU时间)但仅限于设定日期?

animated

我们的数据库在最后一天刚刚受到严重压力,我们无法找出问题的根源。

我们正在使用Azure SQL数据库。

1 个答案:

答案 0 :(得分:2)

每天从DMV获取统计数据是不可能的。 dm_exec_query_stats有列creation_time和last_execution_time当然可以让你知道发生了什么 - 但这只是第一次也是最后一次使用该计划。如果计划从计划缓存中删除,统计数据也将丢失,因此如果情况现在更好(并且“坏”计划已被更好的计划替换),您可能不再拥有该计划及其统计数据。

该查询显示查询使用的平均CPU,因此它不是解决性能问题的完美查询,因为它实际上是平均值,因此即使实际上不是一个具有较小执行计数的内容也可能在列表中非常高问题。我通常使用总CPU和总逻辑读取来解决性能问题 - 但这些是自创建时间以来的总量,这可能是很久以前的事了。在这种情况下,您可能还会考虑将数字除以创建时间后的小时数,因此您将获得每小时的平均CPU / I / O.另外,查看max *列可能会给错误的查询/计划提供一些提示。

如果您遇到此类问题,最好将SQL安排为任务并在某处收集结果。然后,您还可以将其用作基线,以比较情况不好时发生的变化。当然,在这种情况下(也可能是其他情况),你应该更多地看到的不仅仅是前5名。