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

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 &#39;EastRiver&#39; 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...