如何检查SQL Server CPU瓶颈

--检测CPU压力的一个方法是计算运行状态下的工作进程数量,
--通过执行如下的DMV查询可以得到这个信息

SELECT COUNT(*) AS workers_waiting_for_cpu,t2.scheduler_id
FROM sys.dm_os_workers AS t1, sys.dm_os_schedulers AS t2
WHERE t1.state='RUNNABLE' AND 
t1.scheduler_address = t2.scheduler_address AND
 t2.scheduler_id<255
GROUP BY t2.scheduler_id

--也可以执行如下的查询得到工作进程在可运行状态下花费的时间

SELECT SUM(signal_wait_time_ms) FROM sys.dm_os_wait_stats

--下面是一个DMV查询,它可以用来找出每次执行中占用CPU最多的钱10为查询,
--也列出了SQL语句的查询计划及计划被执行的次数。如果一个查询大家虽高,
--但执行次数少,那也可以采纳。

SELECT TOP 10
total_worker_time/execution_count AS avg_cpu_cost, plan_handle,execution_count,
    (SELECT SUBSTRING(text,statement_start_offset/2+1,
        (CASE WHEN statement_end_offset=-1
        THEN LEN(CONVERT(NVARCHAR(max),text))*2
        ELSE statement_end_offset
        END -statement_start_offset)/2)
    FROM sys.dm_exec_sql_text(sql_handle)
    ) AS query_text
FROM sys.dm_exec_query_stats
ORDER BY [avg_cpu_cost] DESC

--以上DMV只显示当前被缓存的查询合计统计信息
--为了找出工作负荷中运行最频繁的查询,就需要执行下面的DMV查询。

SELECT TOP 10 total_worker_time ,plan_handle,execution_count,
    (SELECT SUBSTRING(text,statement_start_offset/2+1,
        (CASE WHEN statement_end_offset=-1
        THEN LEN(CONVERT(NVARCHAR(max),text))*2
        ELSE statement_end_offset
        END -statement_start_offset)/2)
    FROM sys.dm_exec_sql_text(sql_handle)
    ) AS query_text
FROM sys.dm_exec_query_stats ORDER BY execution_count

--SQL Server在优化查询计划上花费的时间可以用下面的DMV查询

SELECT * FROM sys.dm_exec_query_optimizer_info WHERE counter='optimizations'
UNION
SELECT * FROM sys.dm_exec_query_optimizer_info WHERE counter='elapsed time'


SELECT TOP 10 plan_generation_num ,plan_handle,execution_count,
    (SELECT SUBSTRING(text,statement_start_offset/2+1,
        (CASE WHEN statement_end_offset=-1
        THEN LEN(CONVERT(NVARCHAR(max),text))*2
        ELSE statement_end_offset
        END -statement_start_offset)/2)
    FROM sys.dm_exec_sql_text(sql_handle)
    ) AS query_text
FROM sys.dm_exec_query_stats
WHERE plan_generation_num>1
 ORDER BY execution_count
 
 --检查高速缓存内存
 DBCC memorystatus

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值