有谁知道如何在特定数据库(特定于数据库,而不是服务器级别)上找到批处理请求/秒?
这是在特定数据库上查找事务/秒的方法。
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)
'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)
| 归档时间: |
|
| 查看次数: |
2696 次 |
| 最近记录: |