在特定数据库上每秒获取批处理请求

1 monitoring sql-server

有谁知道如何在特定数据库(特定于数据库,而不是服务器级别)上找到批处理请求/秒?

这是在特定数据库上查找事务/秒的方法。

DECLARE @Counter bigint
SELECT @Counter = cntr_value FROM sys.dm_os_performance_counters
WHERE counter_name = 'Transactions/sec'
AND object_name='SQLServer:Databases'
AND instance_name ='VirendraTest' -- Your DB Name

-- Wait for 1 second

WAITFOR DELAY '00:00:01'

SELECT cntr_value = @Counter FROM sys.dm_os_performance_counters
WHERE counter_name ='Transactions/sec'
AND object_name ='SQLServer:Databases'
AND instance_name ='VirendraTest' -- Your DB Name
Run Code Online (Sandbox Code Playgroud)

Dan*_*man 6

'Batch Requests/Sec' 是服务器级计数器,不适用于单个数据库实例。请记住,单个批处理可以访问多个数据库。

您可以使用带有直方图目标的 XE 跟踪获取每个数据库执行的批次和 RPC 的汇总计数,如下例所示。这将只计算执行批处理的上下文数据库,而不是批处理涉及的所有数据库。

CREATE EVENT SESSION [sql_batch_completed_by_database] ON SERVER 
ADD EVENT sqlserver.sql_batch_completed(
    ACTION(sqlserver.database_name))
ADD TARGET package0.histogram(SET filtering_event_name=N'sqlserver.sql_batch_completed',source=N'sqlserver.database_name')
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF);
GO

CREATE EVENT SESSION [rpc_completed_by_database] ON SERVER 
ADD EVENT sqlserver.rpc_completed(
    ACTION(sqlserver.database_name))
ADD TARGET package0.histogram(SET filtering_event_name=N'sqlserver.rpc_completed',source=N'sqlserver.database_name')
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF);
GO

--get snapshot of aggregated counts
WITH
      sql_batch_completed_by_database AS ( 
        SELECT CAST(xet.target_data AS xml) AS event_data
        FROM sys.dm_xe_session_targets AS xet  
        JOIN sys.dm_xe_sessions AS xe  
            ON (xe.address = xet.event_session_address)  
        WHERE xe.name = 'sql_batch_completed_by_database'
    )
    , rpc_completed_by_database AS ( 
        SELECT CAST(xet.target_data AS xml) AS event_data
        FROM sys.dm_xe_session_targets AS xet  
        JOIN sys.dm_xe_sessions AS xe  
            ON (xe.address = xet.event_session_address)  
        WHERE xe.name = 'rpc_completed_by_database'
    )
    , requests_by_database AS (
        SELECT
              slot.value('(./value)[1]', 'sysname') AS DatabaseName
            , slot.value('@count', 'bigint') AS RequestCount
        FROM (SELECT event_data FROM sql_batch_completed_by_database) AS xe(event_data)
        CROSS APPLY event_data.nodes('/HistogramTarget/Slot') AS histogram_target(slot)
        UNION ALL
        SELECT
              slot.value('(./value)[1]', 'sysname') AS DatabaseName
            , slot.value('@count', 'bigint') AS RequestCount
        FROM (SELECT event_data FROM rpc_completed_by_database) AS xe(event_data)
        CROSS APPLY event_data.nodes('/HistogramTarget/Slot') AS histogram_target(slot)
    )
SELECT DatabaseName, SUM(RequestCount) AS RequestCount
FROM requests_by_database
GROUP BY DatabaseName;
GO
Run Code Online (Sandbox Code Playgroud)