本文转自 https://www.cnblogs.com/tianqing/p/11152799.html

  1. 查询数据库阻塞

    SELECT * FROM  sys.sysprocesses WHERE blocked<>0
    

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

查询阻塞根源Session的SQL

DBCC Inputbuffer(sid)
  1. 查询SQL连接分布

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

  2. 查询最消耗CPU的SQL 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

  3. 查看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

设置策略和具体设置方法,请参考:设置策略和具体设置方法

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
  1. 查询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

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

    SELECT * INTO TabSQL
    FROM fn_trace_gettable('C:Users***DesktopTracesql05trace20180606-业务.trc', default);
    GO

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

select  top 100    
        replace(replace(replace(  substring(Textdata,1,6600) ,char(10),' '),char(13),' ') ,char(9),' ')  as '名称',
        --substring(Textdata,1,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,1,6600) ,char(10),' '),char(13),' ') ,char(9),' ') , LoginName
order by sum(duration) desc

最耗IO的SQL

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

最耗CPU的SQL

SELECT TOP 100 replace(replace(replace(  substring(Textdata,1,6600) ,char(10),' '),char(13),' ') ,char(9),' ')  as '名称',LoginName,
       count(*) as '数量',
       sum(duration/1000) as '总执行时间ms',
       avg(duration/1000) as '平均执行时间ms',
       sum(cpu) as '总CPU时间',
       avg(cpu) as '平均CPU时间',
       avg(reads) as '平均读次数',
       avg(writes) as '平均写次数'
from TabSQL
group by replace(replace(replace(  substring(Textdata,1,6600) ,char(10),' '),char(13),' ') ,char(9),' ')   ,LoginName
order by avg(cpu) desc
Last modification:April 27th, 2020 at 02:48 pm
坚持技术分享,您的支持将鼓励我继续创作!