[Microsoft SQL Server] RDS SQL SERVER 支持DMV动态管理视图,方便用户快速查询实例上性能消耗最高的10条SQL语句

适用场景:

1.用户实例出现性能瓶颈,感觉自己的数据库执行效率越来越低

2.或通过监控发现在某些时段CPUIO较高

 

操作步骤:

1.首先在客户端通过rdsuser账号连接到你的实例,在管理面中执行以下语句

 

declare @DatabaseName nvarchar(100)

set @DatabaseName = 'Wisdom_TT_ODS'

 

select top 100

DB_NAME(st.dbid) as DBName, OBJECT_NAME(st.objectid,st.dbid) as ObjectName,

substring(st.text,(qs.statement_start_offset/2)+1,((case qs.statement_end_offset when -1 then datalength(st.text) else qs.statement_end_offset end - qs.statement_start_offset)/2) + 1) as Statement,

st.text as Query,

qp.query_plan

,plan_generation_num

,creation_time

,last_execution_time

,execution_count

,total_worker_time

,min_worker_time  

,max_worker_time

,total_logical_reads

,min_logical_reads

,max_logical_reads

,total_elapsed_time

,min_elapsed_time

,max_elapsed_time

,total_rows

,min_rows

,max_rows

,total_worker_time/execution_count as avg_worker_time                                --平均CPU耗时

,total_logical_reads/execution_count as avg_logical_reads                        --平均逻辑读

,total_elapsed_time/execution_count as avg_elapsed_time                                --平均总耗时

,total_rows/execution_count as avg_rows                                                        --平均处理数据行

,sql_handle                

,plan_handle

,query_hash

,query_plan_hash

from sys.dm_exec_query_stats qs

cross apply sys.dm_exec_sql_text(plan_handle) st

cross apply sys.dm_exec_query_plan(plan_handle) qp

where st.dbid=DB_ID(@DatabaseName)

and text not like '%sys.%'and text not like '%[[]sys]%'

order by avg_worker_time desc

 

2.我们可以看到查询结果中相应数据库中的SQL执行记录以及对应的资源消耗详情。

字段说明详见:http://technet.microsoft.com/zh-tw/library/ms189741.aspx

blob.png

 

3.其中最常用的是total_worker_time total_elapsed_time,这两个参数一个是CPU累计消耗时间,一个是SQL执行累计消耗时间,通过倒序排序,从而获得该数据库或整个实例上面消耗最高的前10 SQL语句

 

4.后面就需要用户自己通过Statement中的SQL语句,结合自身应用业务场景进行优化了。

注:query_plan里面的执行计划有很好的参考价值

 

如果你实在无法优化也没关系,可以花钱购买华为RDS DBA服务,我们来帮你优化。