首页 存档 技术 查看内容

如何找出你性能最差的SQLServer查询 问SQL Server! 让我们进入sys.dm_exec_query_sta ...

2018-3-30 13:00 |来自: 互联网 762 0

摘要: (点击上方蓝字,快速关注我们) 作者:Woodytu 网址:http://www.cnblogs.com/woodytu/p/4721857.html 我经常会被反复问到这样的问题:”我有一个性能很差的SQL Server。我如何找出最差性能的查询?“。因此在今 ...

(点击上方蓝字,快速关注我们)


作者:Woodytu

网址:http://www.cnblogs.com/woodytu/p/4721857.html


我经常会被反复问到这样的问题:”我有一个性能很差的SQL Server。我如何找出最差性能的查询?“。因此在今天的文章里会给你一些让你很容易找到问题答案的信息向导。

问SQL Server!

SQL Server的一个优点是它本身能回答几乎所有你的问题,因为SQL Server在各个DMV和DMF里存储了很多故障排除信息。另一方面这也是个缺点,因为你必须知道各个DMV/DMF,还有如何把它们解释和关联在一起。

至于你的最差性能SQL Server查询的一个最重要的DMV是sys.dm_exec_query_stats。对于每个缓存的执行计划,SQL Server存储了这个执行计划在运行时的详细信息。另外SQL Server告诉你这个查询消耗的CPU时间和I/O读取。当我对性能很差的SQL Server进行故障排除时,这是我经常使用的基本DMV之一。

让我们进入sys.dm_exec_query_stats!

当你对sys.dm_exec_query_stats进行一个简单的SELECT查询,你会得到有很多不同列的一个非常广泛的记录集有大量的不同数字。

我们来仔细看下它们。对于每个缓存的执行计划,SQL Server给你下列度量的信息:

  • Worker Time (columns …_工作者时间)

  • Physical Reads (columns …_物理读)

  • Logical Writes (columns …_逻辑写)

  • Logical Reads (columns …_逻辑读)

  • SQLCLR Time (columns …_公共语言运行时间)

  • Elapsed Time (columns …_运行时间)

  • Row Count (columns …_行数)

对于每个度量,你得到4个集合信息的不同列:

  • 总值(Total value)

  • 上个值(Last value)

  • 最小值(Min value)

  • 最大值(Max value)

手上有了这些信息找出你性能最差的查询是什么。但首先你要知道什么是你的性能瓶颈CPU还是I/O限制?如果你的性能瓶颈是CPU限制,你可以用下列查询问SQL Server根据CPU消耗列出前5个最差性能的查询:

-- Worst performing CPU bound queriesSELECT TOP 5
    st.text,
    qp.query_plan,
    qs.*FROM sys.dm_exec_query_stats qsCROSS APPLY sys.dm_exec_sql_text(qs.plan_handle) stCROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qpORDER BY total_worker_time DESCGO

你可以看到这里我使用了简单的ORDER BY total_worker_time DESC来返回CPU密集的查询。另外也通过调用sys.dm_exec_sql_text和sys.dm_exec_query_plan DMF来抓取SQL语句和执行计划本身。下列代码显示如何依据I/O消耗来找出你性能最差的查询。

-- Worst performing I/O bound queries
SELECT TOP 5
st.text,
qp.query_plan,
qs.*
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.plan_handle) st
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
ORDER BY total_logical_reads DESC
GO

当在你面前有SQL语句和执行计划时,你可以进一步分析查询找出是什么引起高CPU或I/O消耗。

小结

SQL Server是个惊艳的产品:它可以立即给你问题的很好答案。你只要知道在哪里找你的答案。至于性能很差的查询,你总应该通过分析DMV sys.dm_exec_query_stats开始,在这里SQL Server保存里你执行计划运行时统计信息。

感谢关注!


数据库开发

微信号:DBDevs

打造东半球最好的 数据库 微信号

--------------------------------------

商务合作QQ:2302462408

投稿网址:top.jobbole.com





本文转载自:微信公众账号 - 数据库开发,版权归原作者所有!

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部