[推荐]如何找出你性能最差的SQL Server查询?_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
8
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2435 | 回复: 7   主题: [推荐]如何找出你性能最差的SQL Server查询?        下一篇 
jss1084740704
注册用户
等级:上等兵
经验:142
发帖:1
精华:0
注册:2015-8-11
状态:离线
发送短消息息给jss1084740704 加好友    发送短消息息给jss1084740704 发消息
发表于: IP:您无权察看 2015-8-17 9:44:30 | [全部帖] [楼主帖] 楼主

我经常会被反复问到这样的问题:”我有一个性能很差的SQLServer。我如何找出最差性能的查询?“。因此在今天的文章里一些让你很容易找到问题答案的信息和向导。
问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 queriesSELECTTOP5 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 ORDERBY total_worker_time DESCGO


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

1-- Worst performing I/O bound queries 2SELECTTOP5 3     st.text,  4 qp.query_plan,  5     qs.* 6FROM sys.dm_exec_query_stats qs  7CROSS APPLY sys.dm_exec_sql_text(qs.plan_handle) st  8CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp  9ORDERBY total_logical_reads DESC10GO


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

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

该贴被hui.chen编辑于2015-8-17 15:21:38




赞(0)    操作        顶端 
l4222069
注册用户
等级:新兵
经验:71
发帖:0
精华:0
注册:2015-8-17
状态:离线
发送短消息息给l4222069 加好友    发送短消息息给l4222069 发消息
发表于: IP:您无权察看 2015-8-17 9:51:36 | [全部帖] [楼主帖] 2  楼

学习了!不错



赞(0)    操作        顶端 
爱小猪猪的肥猫猫
注册用户
等级:下士
经验:157
发帖:1
精华:0
注册:2015-8-13
状态:离线
发送短消息息给爱小猪猪的肥猫猫 加好友    发送短消息息给爱小猪猪的肥猫猫 发消息
发表于: IP:您无权察看 2015-8-17 10:37:54 | [全部帖] [楼主帖] 3  楼

我是肥猫,我是肥猫,肥猫肥猫,喵喵喵~



赞(0)    操作        顶端 
丹娃oo
注册用户
等级:列兵
经验:97
发帖:1
精华:0
注册:2015-8-13
状态:离线
发送短消息息给丹娃oo 加好友    发送短消息息给丹娃oo 发消息
发表于: IP:您无权察看 2015-8-17 11:18:47 | [全部帖] [楼主帖] 4  楼

丹娃飘过 哟哟切克闹 北京联动北方科技有限公司



赞(0)    操作        顶端 
丹娃oo
注册用户
等级:列兵
经验:97
发帖:1
精华:0
注册:2015-8-13
状态:离线
发送短消息息给丹娃oo 加好友    发送短消息息给丹娃oo 发消息
发表于: IP:您无权察看 2015-8-17 11:19:45 | [全部帖] [楼主帖] 5  楼

丹娃飘过 北京联动北方科技有限公司



赞(0)    操作        顶端 
qq_1439286239448
注册用户
等级:新兵
经验:44
发帖:0
精华:0
注册:2015-8-11
状态:离线
发送短消息息给qq_1439286239448 加好友    发送短消息息给qq_1439286239448 发消息
发表于: IP:您无权察看 2015-8-17 11:31:24 | [全部帖] [楼主帖] 6  楼

先Mark 日后有用



赞(0)    操作        顶端 
Rita_Restart
注册用户
等级:列兵
经验:82
发帖:0
精华:0
注册:2015-8-17
状态:离线
发送短消息息给Rita_Restart 加好友    发送短消息息给Rita_Restart 发消息
发表于: IP:您无权察看 2015-8-17 14:03:29 | [全部帖] [楼主帖] 7  楼

技术贴 Mark~ 谢谢楼猪



赞(0)    操作        顶端 
咿呀咿呀哟
注册用户
等级:下士
经验:159
发帖:0
精华:0
注册:2015-8-11
状态:离线
发送短消息息给咿呀咿呀哟 加好友    发送短消息息给咿呀咿呀哟 发消息
发表于: IP:您无权察看 2015-8-17 14:04:40 | [全部帖] [楼主帖] 8  楼

真的还可以哦,强烈推荐。。。



赞(0)    操作        顶端 
总帖数
8
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论