mssql sqlserver sys.dm_os_wait_stats系统视图简介说明(一)


摘要:
下文讲述 sqlserver系统视图中“sys.dm_os_wait_stats”的用法简介,如下所示:
实验环境:sqlserver 2008 R2



sys.dm_os_wait_stats 功能说明

sys.dm_os_wait_stats 在sqlserver中的功能为返回 执行中的spid所处的等待信息,我们常常使用此视图视图来监控sqlserver的性能。


sys.dm_os_wait_stats 返回列说明

返回列名

返回列数据类型

说明
wait_type

nvarchar(60)

等待类型的代码
waiting_tasks_count

bigint

此类型等待的进程数,当出现此类型等待时,计数器就会加1
wait_time_ms

bigint

此等待类型的总等待时间(毫秒)
max_wait_time_ms

bigint

此等待类型的最长等待时间(毫秒)
signal_wait_time_ms

bigint

正在等待的线程从收到信号通知到其开始运行之间的时差。
pdw_node_id

int

对于此分布的节点标识符。


资源等待类型

1.资源等待
sql进程请求资源时,出现进程不可用,发生资源等待,资源等待包括:  锁等待、闩锁等待、网络等待以及磁盘 I/O 等

2.队列对待
当sql线程空闲,等待分配工作时此时会产生队列等待。
队列等待常见于 监控死锁

3.外部等待
当sql现成等待外部事件时,所消耗的时间我们称之为“外部等待”,外部等待时,线程可能处于非空闲状态。


资源等待计数器重置的方法分享:
DBCC SQLPERF (‘sys.dm_os_wait_stats’, CLEAR);
—等待计数器将会清零,重新计数

mssql sqlserver 通过扩展事件监控数据库中的死锁事件


摘要:
下文讲述使用sql脚本获取,通过扩展事件监控数据库中的死锁事件,如下所示:
实验环境:sql server 2008 R2



 SELECT  xed.value('@timestamp', 'datetime') AS [创建时间] ,
        xed.query('.') AS [扩展事件]
FROM    ( SELECT    CAST([target_data] AS XML) AS Target_Data
          FROM      sys.dm_xe_session_targets AS xt
                    INNER JOIN sys.dm_xe_sessions AS xs ON xs.address = xt.event_session_address
          WHERE     xs.name = N'system_health'
                    AND xt.target_name = N'ring_buffer'
        ) AS XML_Data
        CROSS APPLY Target_Data.nodes('RingBufferTarget/event[@name="xml_deadlock_report"]')
        AS XEventData ( xed )
ORDER BY [创建时间] DESC

mssql sqlserver 查看数据库中所有在WAIT状态的锁


摘要:
下文讲述使用sql脚本获取,数据库中状态为WAIT的锁信息,如下所示:
实验环境:sql server 2008 R2



  SELECT  L1.resource_type ,
        DB_NAME(L1.resource_database_id) AS [数据库名称] ,
        CASE L1.resource_type
          WHEN 'OBJECT'
          THEN OBJECT_NAME(L1.resource_associated_entity_id,
                           L1.resource_database_id)
          WHEN 'DATABASE' THEN 'DATABASE'
          ELSE CASE WHEN L1.resource_database_id = DB_ID()
                    THEN ( SELECT   OBJECT_NAME(object_id,
                                                L1.resource_database_id)
                           FROM     sys.partitions
                           WHERE    hobt_id = L1.resource_associated_entity_id
                         )
                    ELSE NULL
               END
        END AS [对象名称] ,
        L1.resource_description ,
        L1.request_session_id ,
        L1.request_mode ,
        L1.request_status
FROM    sys.dm_tran_locks AS L1
        JOIN sys.dm_tran_locks AS L2 ON L1.resource_associated_entity_id = L2.resource_associated_entity_id
WHERE   L1.request_status <> L2.request_status
        AND ( L1.resource_description = L2.resource_description
              OR ( L1.resource_description IS NULL
                   AND L2.resource_description IS NULL
                 )
            )
ORDER BY L1.resource_database_id ,
        L1.resource_associated_entity_id ,
        L1.request_status ASC;