下面是格式化、优化并添加详细注释说明的SQL Server查询,用于获取不同性能指标的信息:
-- 获取阻塞的SPID数量
SELECT 'Blocked SPIDs' as MetricName, COUNT(DISTINCT blocking_session_id) as MetricValue
FROM sys.dm_exec_requests
WHERE blocking_session_id > 0
UNION ALL
-- 获取锁定数量
SELECT 'Locks' as MetricName, COUNT(DISTINCT request_session_id) as MetricValue
FROM sys.dm_tran_locks
UNION ALL
-- 获取等待统计信息中的总等待时间
SELECT 'Wait Stats' as MetricName, SUM(wait_time_ms) as MetricValue
FROM sys.dm_os_wait_stats
UNION ALL
-- 获取最长运行的查询的总耗时
SELECT 'Longest Running Queries' as MetricName, MAX(total_elapsed_time) as MetricValue
FROM sys.dm_exec_requests
UNION ALL
-- 获取消耗最多CPU时间的查询的CPU使用量
SELECT 'CPU Usage' as MetricName,
(SELECT TOP 1
CAST((total_worker_time / (1000.0 * 60 * 60)) AS DECIMAL(10,2)) as MetricValue
FROM sys.dm_exec_query_stats
ORDER BY total_worker_time DESC
)
UNION ALL
-- 获取内存使用情况(以MB为单位)
SELECT 'Memory Usage' as MetricName,
(physical_memory_in_use_kb / 1024.0) as MetricValue
FROM sys.dm_os_process_memory
这个查询将返回以下性能指标的信息:
- ‘Blocked SPIDs’:阻塞的会话数量。
- ‘Locks’:当前锁定的会话数量。
- ‘Wait Stats’:等待统计信息中的总等待时间(以毫秒为单位)。
- ‘Longest Running Queries’:最长运行的查询的总耗时(以毫秒为单位)。
- ‘CPU Usage’:消耗CPU时间最多的查询的CPU使用量(以小时为单位)。
- ‘Memory Usage’:服务器进程占用的物理内存使用量(以MB为单位)。
用于获取消耗CPU时间最多的查询的CPU使用量:
-- 获取消耗CPU时间最多的查询的CPU使用量
SELECT TOP 1
-- 将总工作时间(以毫秒为单位)转换为小时并保留两位小数
CAST((total_worker_time / (1000.0 * 60 * 60)) AS DECIMAL(10,2)) as MetricValue
FROM sys.dm_exec_query_stats
-- 按总工作时间降序排序查询统计信息,以找到最耗时的查询
ORDER BY total_worker_time DESC
这个查询将返回消耗CPU时间最多的查询的CPU使用量,以小时为单位,并将其命名为 “MetricValue
”。注释提供了关于查询目的和排序方式的说明。