永发信息网

如何识别SQL Server中的CPU瓶颈

答案:1  悬赏:40  手机版
解决时间 2021-03-03 19:14
如何识别SQL Server中的CPU瓶颈
最佳答案
问题:
如果经常遇到CPU瓶颈而导致的SQLServer宕机,那如何去发现并解决这些相关的问题?

解决方案:
导致CPU成为SQLServer性能问题的原因有很多,比较明显的原因是因为资源不足。但是,CPU的利用率可以通过配置的更改和查询的优化来降低,所以当你想买更快更好的处理器之前,先要考虑前面的操作。下面是使用一些内置工具来识别CPU相关瓶颈:

性能监视器(Performance Monitor):
可以使用性能监视器来检查CPU的负载。检查Processor:% Processor Time 这个计数器:如果长期超过80%/处理器,那很有可能面临了CPU相关瓶颈。

CPU密集操作主要是编译和重编译。你可以通过使用SQL Statistics对象计数器来监视它们的情况。也可以监控批处理接收的数量来查看。如果SQL Recompilations/sec 中的BatchRequests/sec的速率很高,那就有潜在的问题:
配置和监视以下计数器:
SQL Server: SQL Statistics: SQL Compilations/sec
SQL Server: SQL Statistics: SQL Recompilations/sec
SQL Server: SQL Statistics: Batch Requests/sec
可以从MSDN中获取关于这部分的详细信息: MSDN Library.

另外一个用于探测CPU相关问题的计数器是:SQL Server: Cursor Manager By Type – CursorRequests/Sec ,用于显示你的服务器上游标使用情况。如果你看到每秒有数以百计的游标请求,那很有可能是因为低效的游标使用和小体积提取操作(small fetch size)引起性能问题。

内部并行查询同样会引起CPU问题,可以检查:
SQL Statistics:Batch Requests/sec counter 计数器。在CPU生命周期中,每秒的批处理应该很小。如果过多,意味着正在使用并行计划运行。

动态管理视图(DMVs):
以下是对排查CPU瓶颈游泳的DMVs。动态视图:sys.dm_exec_query_stats显示目前缓存的批处理或者使用CPU的过程。下面的查询用于检查耗费CPU的执行计划:
select plan_handle,
sum(total_worker_time) as total_worker_time,
sum(execution_count) as total_execution_count,
count(*) as number_of_statements
from sys.dm_exec_query_stats
group by plan_handle
order bysum(total_worker_time), sum(execution_count) desc

SQLServer2008在每个查询编译时,会计算其hash值。你可以在query_hash列中找到该值,是否两个查询仅仅字面值不同但是使用相同query_hash值。该值也在 Showplan/Statistics XML QueryHash属性中可以查看。
Plan_generation_num列显示一个查询被重编译的次数。
SQLServer优化器尝试选择能提供最快响应时间的执行计划,但是不代表总是低CPU利用。低效的查询计划会引起CPU的好用,此时同样可以使用sys.dm_exec_query_stats 来监控。
如果你想有一个对SQLServer优化所耗费时间的总览,可以检查:
sys.dm_exec_query_optimizer_info 。其中的消耗时间和最后开销会非常有用。
可以使用以下DMVs来查询内部并行查询及其查询文本、执行计划的情况:
sys.dm_exec_cached_plan: Shows the cached query plans.
sys.dm_exec_requests: Shows each executing request in the SQL Server instance.
sys.dm_exec_sessions: Shows all active user connections and internal tasks.
sys.dm_exec_sql_text: Shows the text of the SQL batches.
sys.dm_os_tasks: Shows each active task within SQL Server.

SQL Server Profiler:
如果性能监视器发现有问题,同样可以使用SQLServer Profiler来发现不必要的编译和重编译。SQLServer Profiler 跟踪能帮助你找到一直重编译的存储过程。可以使用下面的事件:
SP:Recompile, CursorRecompile, SQL:StmtRecompile: 这个事件是针对SQLServer的重编译。SP:Recompile事件中的EventSubClass 说明了重编译的原因。
· Showplan XML For Query Compile: 这个事件是针对T-SQL语句的重编译。包含了查询计划和过程的对象ID.注意对这个事件运行一个跟踪,能得到利用系统资源的重要信息。但是,如果性能计数器报告SQL Compilations/sec 的值很高时,跟踪将非常好资源。
低效的游标可以使用RPC:Completed事件来跟踪。查看sp_cursorfetch语句并检查第四个参数,包含每次提前(fetch)包含的行数。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
qq怎么查看自己的密码,我的Q现在在线不想该
佳果飘香水果超市怎么去啊,有知道地址的么
因材施教是谁提出的
steam断网后能玩吗
以很优惠的价格出售的英语单词怎么写
我现在很过分吗?
昂达v919 air ch怎么办
【足责】子墨子怒耕柱子.耕柱子曰:“我无愈于
河东副食地址有知道的么?有点事想过去
怎么把笔记本电脑充满电?
北奔V36*2牵引车怎么样
日语ねんれん是什么意思
蝉的幼虫期叫蝉猴、知了猴或蝉龟蝉蜕是蝉发育
求世界杯赛程表
有谁知道中央音乐学院一年有几次考音级
推荐资讯
马自达3与新款日产TIIDA(琪达)哪个更好
我是一个企业老板,应该怎样自我介绍?
惠州惠城区的隐形眼镜多少钱
湖北森茂公司这个地址在什么地方,我要处理点
一个女孩见陌生男网友、只聊天办事不那个、为
中国邮政储蓄银行整存整取定期存单挂失需要多
安全鞋钢包头磨脚还能穿吗?
安阳住房公积金能贷多少钱
乳腺低回声结节BI-RADS分级3级严重吗?要开刀
北京青年政治学院好考吗?
用手机怎么破解学校认证的wifi
英语翻译Assertive behavior leads to increa
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?