php sql性能监视器,5. SQL Server数据库性能监控

对于在线运行的系统,当前数据库性能监控,通常监视以下几点:(1)是否有阻塞(Blocking);(2)是否有等待(Waiting),阻塞就是锁(Lock)等待;(3)是否运行时间过长(Lon

对于在线运行的系统,当前数据库性能监控,通常监视以下几点:

(1) 是否有阻塞 (Blocking);

(2) 是否有等待 (Waiting),阻塞就是锁 (Lock) 等待;

(3) 是否运行时间过长(Long running);

(4) 是否有死锁 (Deadlock);

sys.dm_exec_query_stats之类,等一些统计性的信息,通常不作为实时告警内容,而是在性能优化时,作为参考。

一. 阻塞/等待/长时间运行

1. SQL Server 2005 及以后版本检查SELECT r.session_id

,r.blocking_session_id

,DB_Name(r.database_id) as database_name

,r.start_time

,r.total_elapsed_time

,r.[status]

,CASE WHEN r.blocking_session_id<> 0 THEN'Blocking'

WHEN r.blocking_session_id= 0 AND r.wait_type is not null THEN 'Waiting'

ELSE 'Long-running'

END as slowness_type

,r.percent_complete

,r.command

,r.wait_type

,r.wait_time

,r.wait_resource

,r.last_wait_type

,r.cpu_time

,r.reads

,r.writes

,r.logical_reads

,t.[text] as executing_batch

,SUBSTRING(t.[text],

r.statement_start_offset/2,

(CASE WHENr.statement_end_offset =-1

THENDATALENGTH(t.[text]) --LEN(CONVERT(NVARCHAR(MAX),t.text)) * 2

ELSE r.statement_end_offset

END - r.statement_start_offset )/2+ 1) as executing_sql

,bt.[text] as blocking_batch

,SUBSTRING(bt.[text],

br.statement_start_offset/2,

(CASE WHENbr.statement_end_offset = -1

THENDATALENGTH(bt.[text]) --LEN(CONVERT(NVARCHAR(MAX),bt.text)) * 2

ELSE br.statement_end_offset

END - br.statement_start_offset )/2+ 1) as blocking_sql

--,p.query_plan

FROM sys.dm_exec_requests r

CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) as t

CROSS APPLY sys.dm_exec_query_plan(r.plan_handle) as p

LEFT JOIN sys.dm_exec_requests br

ON r.blocking_session_id =br.session_id

OUTER APPLY sys.dm_exec_sql_text(br.session_id) as bt

WHERE r.session_id > 50 and r.session_id <> @@SPID

AND r.total_elapsed_time >30 * 60 * 1000

ORDER BY r.total_elapsed_timeDESC;

以上脚本返回运行超过30分钟的语句,需要注意的是:

(1) 如果返回执行计划,会让以上脚本变慢很多,可以不返回,在收到告警后检查语句时,再去查看执行计划;

(2) 显示TEXT,比如: xp_cmdshell这样的语句,start_offset, end_offset都为0,截取的 text是空白,只有看TEXT才知道是什么语句;还有就是有时需要知道这个请求来自哪个batch或者存储过程;

(3) 有时显示TEXT还不够,还以xp_cmdshell为例,需要dbcc inputbuffer才能看到完整的sql语句;另外已运行结束但还没有commit/rollback的事务,在requests中已经没有了,也需要借用dbcc inputbuffer来查看sql 语句;dbcc inputbuffer(@@SPID)

(4) SQL Agent作业,在这里会被一并检查,也可以通过msdb..sysjobactivity另行检查;select b.name, *

from msdb..sysjobactivity a

inner join msdb.dbo.sysjobs b

on a.job_id = b.job_id

where b.name like '%backup%'

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值