微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQLServer常用运维SQL整理

今天线上sqlServer数据库cpu被打爆了,紧急情况下,分析了数据库阻塞、连接分布、最耗cpu的TOP10 sql查询sql并行度配置、查询sql 重编译的原因等等

整理了一些常用的sql

1. 查询数据库阻塞

SELECT * FROM  sys.sysprocesses WHERE blocked<>0  

查询结果中,重点看Blocked这一列,先找出最多的SID,然后循环找出Root的阻塞根源SID

查询阻塞根源Session的sql

DBCC Inputbuffer(sid)

2. 查询sql连接分布

SELECT Hostname FROM  sys.sysprocesses WHERE hostname<>‘‘

3. 查询最消耗cpusql Top10

select top(10) st.text as Query,qs.total_worker_time,qs.execution_count from 
sys.dm_exec_query_stats as qs CROSS Apply sys.dm_exec_sql_text(qs.sql_handle) AS st
order by qs.total_worker_time desc

4. 查看sqlServer并行度

SELECT value_in_use  FROM sys.configurations WHERE name = ‘max degree of parallelism‘

并行度如果设置为1,To suppress parallel plan generation,set max degree of parallelism to 1

将阻止并行编译生成sql执行计划,最大并行度设置为1

设置策略和具体设置方法,请参考:https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/configure-the-max-degree-of-parallelism-server-configuration-option?view=sql-server-2017

USE DatabaseName ;  
GO   
EXEC sp_configure ‘show advanced options‘,1;  
GO  
RECONfigURE WITH OVERRIDE;  
GO  
EXEC sp_configure ‘max degree of parallelism‘,16;  
GO  
RECONfigURE WITH OVERRIDE;  
GO

  

5. 查询sql Server Recompilation Reasons

select dxmv.name,dxmv.map_key,dxmv.map_value from 
sys.dm_xe_map_values as dxmv where dxmv.name=‘statement_recompile_cause‘ order by dxmv.map_key

6. 将sql Trace文件存入一张表,做聚合分析(cpu、IO、执行时间等)

SELECT * INTO Tabsql
FROM fn_trace_gettable(‘C:\Users\***\Desktop\Trace\sql05trace20180606-业务.trc‘,default);
GO

对上述表数据进行聚合分析最耗时的sql

select  top 100 	
	    replace(replace(replace(  substring(Textdata,1,6600),char(10),‘ ‘),char(13),char(9),‘ ‘)  as ‘名称‘,--substring(Textdata,6600)  as old,count(*) as ‘数量‘,sum(duration/1000) as ‘总执行时间ms‘,avg(duration/1000) as ‘平均执行时间ms‘,avg(cpu) as ‘平均cpu时间ms‘,avg(reads) as ‘平均读次数‘,avg(writes) as ‘平均写次数‘,LoginName
from Tabsql   t
group by   replace(replace(replace(  substring(Textdata,LoginName
order by sum(duration) desc 

最耗IO的sql

select  TOP 100 replace(replace(replace(  substring(Textdata,‘ ‘) as ‘名称‘,LoginName,sum(cpu) as ‘总cpu时间ms‘,sum(reads) as ‘总读次数‘,avg(writes) as ‘平均写次数‘
from Tabsql
group by replace(replace(replace(  substring(Textdata,LoginName 
order by  sum(reads) desc

最耗cpusql

SELECT TOP 100 replace(replace(replace(  substring(Textdata,sum(cpu) as ‘总cpu时间‘,avg(cpu) as ‘平均cpu时间‘,LoginName
order by avg(cpu) desc

 

  

 

周国庆

2019/7/8

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐