监控SQL Server正在执行的SQL语句和死锁情况

SELECT [Individual Query] = SUBSTRING(qt.TEXT, er.statement_start_offset / 2, (
            CASE 
                WHEN er.statement_end_offset = - 1
                    THEN LEN(CONVERT(NVARCHAR(MAX), qt.TEXT)) * 2
                ELSE er.statement_end_offset
                END - er.statement_start_offset
            ) / 2),
    [Parent Query] = qt.TEXT,
    [Spid] = session_Id,
    ecid,
    [Database] = DB_NAME(sp.dbid),
    [User] = nt_username,
    [Status] = er.STATUS,
    [Wait] = wait_type,
    Program = program_name,
    Hostname,
    nt_domain,
    start_time
FROM sys.dm_exec_requests er
INNER JOIN sys.sysprocesses sp ON er.session_id = sp.spid
CROSS APPLY sys.dm_exec_sql_text(er.sql_handle) AS qt
WHERE session_Id > 50 /* Ignore system spids.*/
    AND session_Id NOT IN (@@SPID)
 
--每秒死锁数量
SELECT *
FROM sys.dm_os_performance_counters
WHERE counter_name LIKE 'Number of Deadlocksc%';
 
--查询当前阻塞
WITH CTE_SID(BSID, SID, sql_handle) AS (
        SELECT blocking_session_id,
            session_id,
            sql_handle
        FROM sys.dm_exec_requests
        WHERE blocking_session_id <> 0
        UNION ALL
        SELECT A.blocking_session_id,
            A.session_id,
            A.sql_handle
        FROM sys.dm_exec_requests A
        JOIN CTE_SID B ON A.SESSION_ID = B.BSID
        )  
 
SELECT C.BSID,
    C.SID,
    S.login_name,
    S.host_name,
    S.STATUS,
    S.cpu_time,
    S.memory_usage,
    S.last_request_start_time,
    S.last_request_end_time,
    S.logical_reads,
    S.row_count,
    q.TEXT
FROM CTE_SID C
JOIN sys.dm_exec_sessions S ON C.sid = s.session_id
CROSS APPLY sys.dm_exec_sql_text(C.sql_handle) Q
ORDER BY sid 
 
--检查表的更新排他锁
DECLARE @t_lock AS TABLE (
    [spid] [smallint] NULL,
    [dbid] [smallint] NOT NULL,
    [ObjId] [int] NOT NULL,
    [IndId] [smallint] NOT NULL,
    [Type] [nvarchar](4) NULL,
    [Resource] [nvarchar](32) NULL,
    [Mode] [nvarchar](8) NULL,
    [Status] [nvarchar](5) NULL
    )
 
INSERT INTO @t_lock
EXEC sp_lock
 
SELECT *,
    [Database] = DB_NAME([dbid]),
    [Object] = OBJECT_NAME([ObjId], [dbid])
FROM @t_lock
WHERE [spid] > 50 /* Ignore system spids.*/
    AND [spid] NOT IN (@@SPID)
    AND [Type] = 'TAB'
    AND [Mode] IN (
        'U',
        'IU',
        'SIU',
        'UIX',
        'BU',
        'RangeS_U',
        'RangeI_U',
        'X',
        'IX',
        'SIX',
        'UIX',
        'RangeI_X',
        'RangeX_S',
        'RangeX_U',
        'RangeX_X'
        )

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值