设为首页 加入收藏

TOP

SQLServer通过DMV实现低影响的自动监控和历史场景追溯 (九)
2014-11-24 01:42:01 来源: 作者: 【 】 浏览:13
Tags:SQLServer 通过 DMV 实现 影响 自动 监控 历史 场景 追溯
_time, C.last_read, C.last_write,
C.net_transport, C.client_net_address, C.client_tcp_port, C.local_tcp_port,
R.start_time, R.wait_time, R.wait_type, R.last_wait_type, R.wait_resource,
R.open_transaction_count,GETDATE()
FROMsys.dm_exec_sessions S
LEFTJOINsys.dm_exec_connections C
ONS.session_id =C.session_id
LEFTJOINsys.dm_exec_requests R
ONS.session_id =R.session_id
ANDC.connection_id =R.connection_id
OUTERAPPLY sys.dm_exec_sql_text(R.sql_handle) T
WHERE S.is_user_process =1 -- 如果不限制此条件,则查询所有进程(系统和用户进程)
ANDcommand isnotnull


--记录当前阻塞信息
insertintodc_info_BlockedInfo
select@banch_id,t1.resource_type as[lock type],db_name(resource_database_id) as[database]
,t1.resource_associated_entity_id as[blk object]
,t1.request_mode as[lock req] -- lock requested
,t1.request_session_id as[waiter sid] -- spid of waiter
,t2.wait_duration_ms as[wait time]
,(selecttextfromsys.dm_exec_requests asr --- get sql for waiter
crossapply sys.dm_exec_sql_text(r.sql_handle)
wherer.session_id =t1.request_session_id) aswaiter_batch
,(selectsubstring(qt.text,r.statement_start_offset/2,
(casewhenr.statement_end_offset =-1thenlen(convert(nvarchar(max), qt.text)) *2
elser.statement_end_offset end-r.statement_start_offset)/2)
fromsys.dm_exec_requests asr
crossapply sys.dm_exec_sql_text(r.sql_handle) asqt
wherer.session_id =t1.request_session_id) aswaiter_stmt --- statement executing now
,t2.blocking_session_id as[blocker sid] --- spid of blocker
,(selecttextfromsys.sysprocesses asp --- get sql for blocker
crossapply sys.dm_exec_sql_text(p.sql_handle)
wherep.spid =t2.blocking_session_id) asblocker_stmt,getdate()
fromsys.dm_tran_locks ast1, sys.dm_os_waiting_tasks ast2
wheret1.lock_owner_address =t2.resource_address


--记录资源信息
insertintodc_Blocked_Resource_Info
select convert(smallint, req_spid) Asspid,
rsc_dbid Asdbid,
rsc_objid AsObjId,
rsc_indid AsIndId,
substring(v.name, 1, 4) AsType,
substring(rsc_text, 1, 32) asResource,
substring(u.name, 1, 8) AsMode,
substring(x.name, 1, 5) AsStatus ,@banch_id
from master.dbo.syslockinfo,
master.dbo.spt_values v,
master.dbo.spt_values x,
master.dbo.spt_values u
where master.dbo.syslockinfo.rsc_type =v.number
andv.type ='LR'
andmaster.dbo.syslockinfo.req_status =x.number
andx.type ='LS'
andmaster.dbo.syslockinfo.req_mode +1=u.number
andu.type ='L'
andsubstring(x.name, 1, 5) ='WAIT'
orderbyspid

execusp_blocker_info @banch_id

end

GO

3. 创建信息收集和邮件报警的SP:

说明:

SP定义了一个邮件发送的过程,需要先配置好数据库的邮件发送(google一下很多的);

SP需要做到JOB里面,一分钟运行一次收集信息;

SP收集信息时的条件(不同的系统触发条件不一样):

a. 用户链接数大于550,活动链接数大于40;

b. 阻塞进程比率大于10%;

USE[master]
GO
--创建触发监控条件,并发邮件
CREATEproc[dbo].[ConAlert]
as
begin
DECLARE@connfloat,@activeconnfloat,@blockedcountfloat,@spidcountfloat,@spidblockedfloat,@countint
DECLARE@bodyNVARCHAR(MAX),@subject nvarchar(200)

-- User Connections
Select@

首页 上一页 6 7 8 9 10 下一页 尾页 9/10/10
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇SQL Azure(一) 入门 下一篇SQL SERVER 数据库主键和外键的思..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: