SQL Server 性能指标

本文整理了 SQL Server 数据库常见的性能监控指标,涵盖 CPU、内存、I/O、锁、等待统计及高可用性等相关维度。这些指标有助于 DBA 和开发人员快速定位性能瓶颈。

注意:部分指标名称源自性能计数器(Performance Counters)或动态管理视图(DMV),具体采集方式可能因监控工具而异。

CPU 与网络

指标名称指标键值单位描述
CPU 使用率CPU_Utilization%SQL Server 进程占用的 CPU 百分比。
网络读取流量Net_Read_KbKB网络读取数据量。
网络写入流量Net_Write_KbKB网络写入数据量。

缓存与命中率

指标名称指标键值单位描述
高速缓存命中率Cache_Hit_Ratio%通用高速缓存命中率。
缓冲区缓存命中率Buffer_Cache_Hit_Ratio%在缓冲区高速缓存中找到而不需要从磁盘中读取的页的百分比。
页生命周期预期Page_Life_Expectancy页在缓冲池中停留的预期时间,反映内存压力。

线程等待统计 (Wait Stats)

线程等待类型是诊断 SQL Server 性能问题的核心依据。以下为常见等待类型及其含义:

指标名称单位描述
ASYNC_NETWORK_IOms数据库服务等待客户端取走数据的等待时间(通常指客户端处理慢)。
CHECKPOINT_QUEUEms检查点任务队列长度等待。
CHKPTms服务器通知检查点线程启动的次数等待。
CXPACKETms并行查询中,线程等待其他并行线程处理完成(常与并行度设置有关)。
IO_COMPLETIONms等待 I/O 操作完成。
LATCH_EXms等待 EX(排他)闩锁。
LATCH_SHms等待 SH(共享)闩锁。
LATCH_UPms等待 UP(更新)闩锁。
LCK_M_Sms任务正在等待获取共享锁(Shared Lock)。
LCK_M_SCH_Mms任务正在等待获取架构修改锁(Schema Modification Lock)。
LCK_M_SCH_Sms任务正在等待获取架构共享锁(Schema Stability Lock)。
LCK_M_Ums任务正在等待获取更新锁(Update Lock)。
LCK_M_Xms任务正在等待获取排他锁(Exclusive Lock)。
LOGBUFFERms任务等待日志缓冲区的空间以存储日志记录,提示日志设备压力。
LOGMGR_QUEUEms日志写入任务队列长度等待。
PAGEIOLATCH_EXms任务等待 I/O 请求(独占模式)中缓冲区的闩锁,提示 I/O 压力。
PAGEIOLATCH_SHms任务等待 I/O 请求(共享模式)中缓冲区的闩锁,提示 I/O 压力。
PAGEIOLATCH_UPms任务等待 I/O 请求(更新模式)中缓冲区的闩锁,提示 I/O 压力。
PAGELATCH_SHms任务等待不处于 I/O 请求(共享模式)中的缓冲区闩锁,常提示 tempdb 资源争抢。
PAGELATCH_UPms任务等待不处于 I/O 请求(更新模式)中的缓冲区闩锁,常提示 tempdb 资源争抢。
RESOURCE_SEMAPHOREmsWorker 等待 SQL Server 给予其申请的内存,提示内存压力。
SOS_SCHEDULER_YIELDms该等待与 CPU 有直接关系,任务让出 CPU 时间片,提示 CPU 压力。
WRITELOGms等待日志刷新完成。
WRITE_COMPLETIONms等待 I/O 写入完成。

磁盘与空间

指标名称指标键值单位描述
数据空间大小Data_SizeMB数据文件占用空间大小。
实例总空间大小Instance_SizeMB实例总空间大小。
日志空间大小Log_SizeMB日志文件占用空间大小。
其他空间大小Other_SizeMB其他文件占用空间大小。
临时空间大小Tmp_SizeMB实例临时空间大小(通常指 tempdb)。

连接与会话

指标名称指标键值单位描述
登录次数Logins次/秒每秒启动的登录总数,不包括已入池连接。
注销次数Logout次/秒每秒启动的注销操作总数。
活跃游标Active_Cursors当前活跃游标数量。
活跃临时表Active_Temp_Tables当前活跃临时表数量。
活跃事务Active_Transactions当前活跃事务数量。
活跃会话Active_Sessions当前活跃会话数量。
连接重置Connection_Reset个/秒每秒从连接池启动的登录总次数。
总连接数Total_Connections当前与 SQL Server 连接的用户数。

查询与负载 (QPS/TPS)

指标名称指标键值单位描述
查询每秒 (QPS)QPS个/秒每秒批处理请求数。
事务每秒 (TPS)TPS_Transactions个/秒每秒为数据库启动的事务数。
写事务每秒TPS_Transactions_Writes个/秒在上一秒钟内写入数据库并提交的事务数。
全扫描次数Full_Scans次/秒每秒表和全文索引完全扫描次数。
转发记录数Forwarded_Records/sec个/秒每秒通过记录指针提取的记录数(堆表更新常见)。
索引搜索次数Index_Searches/sec次/秒每秒索引搜索次数。

负载分布 (响应时间直方图)

统计不同响应时间范围内的 SQL 批处理数目,用于分析查询延迟分布。

指标键值单位描述
Batches000000ms_000001ms响应时间 >= 0ms & <= 1ms 的 SQL 批处理数目。
Batches000001ms_000002ms响应时间 >= 1ms & <= 2ms 的 SQL 批处理数目。
Batches000002ms_000005ms响应时间 >= 2ms & <= 5ms 的 SQL 批处理数目。
Batches000005ms_000010ms响应时间 >= 5ms & <= 10ms 的 SQL 批处理数目。
Batches000010ms_000020ms响应时间 >= 10ms & <= 20ms 的 SQL 批处理数目。
Batches000020ms_000050ms响应时间 >= 20ms & <= 50ms 的 SQL 批处理数目。
Batches000050ms_000100ms响应时间 >= 50ms & <= 100ms 的 SQL 批处理数目。
Batches000100ms_000200ms响应时间 >= 100ms & <= 200ms 的 SQL 批处理数目。
Batches000200ms_000500ms响应时间 >= 200ms & <= 500ms 的 SQL 批处理数目。
Batches000500ms_001000ms响应时间 >= 500ms & <= 1000ms 的 SQL 批处理数目。
Batches001000ms_002000ms响应时间 >= 1000ms & <= 2000ms 的 SQL 批处理数目。
Batches002000ms_005000ms响应时间 >= 2000ms & <= 5000ms 的 SQL 批处理数目。
Batches005000ms_010000ms响应时间 >= 5000ms & <= 10000ms 的 SQL 批处理数目。
Batches010000ms_020000ms响应时间 >= 10000ms & <= 20000ms 的 SQL 批处理数目。
Batches020000ms_050000ms响应时间 >= 20000ms & <= 50000ms 的 SQL 批处理数目。
Batches050000ms_100000ms响应时间 >= 50000ms & <= 100000ms 的 SQL 批处理数目。
Batches100000ms响应时间 >= 100000ms 的 SQL 批处理数目。

I/O 性能

指标名称指标键值单位描述
总 IOPSIOPS_Total个/秒每秒 IO 总个数。
读 IOPSIOPS_Read个/秒每秒 IO 读取个数。
写 IOPSIOPS_Write个/秒每秒 IO 写入个数。
读吞吐量IO_Throughput_Read_KbKB/秒IO 读取吞吐量。
写吞吐量IO_Throughput_Write_kbKB/秒IO 写入吞吐量。
总吞吐量IO_Throughput_Total_KbKB/秒IO 总吞吐量。
后台写入页Background_Writer_Pages/sec个/秒为强制恢复间隔设置而刷新的页数。
压缩页Pages_Compressed/sec页/秒每秒使用 PAGE 压缩的数据页数。
页查找Page_Lookups/sec个/秒每秒在缓冲池中查找页的次数。
预读取页Readahead_Pages/sec个/秒每秒预读取的页数。
物理页读取Page_Reads个/秒每秒发生的物理数据库页读取数。
页拆分Page_Splits个/秒每秒由于索引页溢出而发生的页拆分数。
物理页写入Page_Writes个/秒每秒发出的物理数据库页写入数。

内存使用分类

指标名称指标键值单位描述
连接内存Connection_Memory_KbKB连接消耗的内存大小。
数据库缓存内存Database_Cache_Memory_KbKB当前正用来缓存数据库页面的内存量。
空闲内存Free_Memory_KbKB服务器当前未使用的已提交内存量。
锁内存Lock_Memory_KbKB用于锁管理的动态内存总量。
优化器内存Optimizer_Memory_KbKB服务器正用于查询优化的动态内存总数。
SQL 缓存内存SQL_Cache_Memory_KbKB指定服务器正用于动态 SQL 缓存的动态内存总数。
窃取服务器内存Stolen_Server_Memory_KbKB指定服务器当前正用于除数据库页面之外的其他用途的内存量。
总服务器内存Total_Server_Memory_KbKBSQL Server 总内存使用。
待授予内存Memory_Grants_Pending进程等待内存授予总次数。
内存授予队列等待Memory_Grant_Queue_Waits等待内存授予的进程的统计信息。
线程安全内存对象等待Threadsafe_Memory_Objects_Waitsms等待线程安全内存分配器的进程的统计信息。

锁与阻塞

指标名称指标键值单位描述
死锁次数Deadlock次/秒每秒死锁发生的次数。
锁超时Lock_Timeout个/秒每秒超时的锁请求数,包括对 NOWAIT 锁的请求。
平均闩锁等待时间Average_Latch_Wait_Timems请求闩锁资源的平均等待时间。
平均锁等待时间Average_Lock_Wait_Timems请求锁资源的平均等待时间。
锁请求Lock_Requests/sec次/秒每秒请求的新锁和锁转换次数。
锁等待 (统计)Lock_Waits等待锁的进程的统计信息。
锁等待时间Lock_Wait_Time_msms锁在最后一秒内的总等待时间。
锁等待 (请求数)Lock_Waits个/秒每秒调用者等待的锁请求数。
闩锁等待Latch_Waits次/秒每秒未能立即授予闩锁请求次数。
总闩锁等待时间Total_Latch_Wait_Time_msms上一秒钟内的闩锁请求的总等待时间。
锁升级Table_Lock_Escalations/sec次/秒表上的锁升级到 TABLE 或 HoBT 粒度的次数。
最长事务运行时间Longest_Transaction_Running_Time长的事务启动后运行的时间长度。
阻塞进程数Processes_Blocked当前阻塞的进程数。
未提交事务数Uncommited_Trans未提交的事务数。
等待 WorkerWait_for_Worker等待工作线程变得可用的进程相关的统计信息。
日志写入等待Log_Write_Waits等待写入日志缓冲区的进程的统计信息。
工作空间同步等待Workspace_Synchronization_Waits%与同步访问工作空间的进程相关的统计信息。

日志与检查点

指标名称指标键值单位描述
日志缓冲区等待Log_Buffer_Waits等待日志缓冲区可用的进程的统计信息。
日志刷新大小Log_Bytes_Flushed/secBytes/秒每秒刷新的日志大小。
日志缓存读取Log_Cache_Reads/sec个/秒每秒通过日志管理器缓存执行的读取次数。
日志刷新次数Log_Flushes/sec次/秒每秒日志刷新次数。
日志池请求Log_Pool_Requests/sec次/秒日志池处理的日志块请求数。
日志使用百分比Percent_Log_Used%日志中已用空间所占的百分比。
日志刷新等待Log_Flush_Waits/sec次/秒每秒等待日志刷新的提交数目。
日志刷新写入时间Log_Flush_Write_Time_msms执行在最后一秒完成的写入日志刷新信息的时间。
检查点页数Checkpoint个/秒每秒刷新所有脏页的检查点或其他刷新到磁盘的页数。
惰性写入Lazy_Writes/sec个/秒每秒刷新脏页缓冲区到磁盘的次数。
日志增长次数Log_Growths数据库事务日志增长的总次数。
日志收缩次数Log_Shrinks数据库的日志收缩总数。
日志截断次数Log_Truncations事务日志被截断的次数。

执行计划与编译

指标名称指标键值单位描述
缓存对象使用中Cache_Objects_in_Use执行计划缓存中正在被使用对象个数。
缓存对象总数Cache_Object_Counts执行计划缓存存储对象的个数。
缓存页数Cache_Pages执行计划缓存使用的页数据(8KB/page)。
自动参数化尝试AutoParam_Attempts/sec次/秒每秒的自动参数化尝试次数。
自动参数化失败Failed_AutoParams/sec次/秒每秒自动参数化尝试失败次数。
强制参数化Forced_Parameterizations/sec次/秒每秒成功执行的强制参数化次数。
安全自动参数化Safe_AutoParams/sec次/秒每秒安全自动参数化尝试次数。
重编译次数Resqlcompilations次/秒每秒语句重新编译的次数。
编译次数Sqlcompilations次/秒每秒的 SQL 编译次数。
不安全自动参数化Unsafe_AutoParams/sec次/秒每秒不安全的自动参数化尝试次数。
误导计划执行Misguided_Plan_Executions/sec次/秒每秒执行计划是通过使用计划指南生成的次数。

高可用性 (Mirror & AlwaysOn)

说明:数据库镜像 (Database Mirroring) 功能已在较新版本中标记为 deprecated,建议使用 AlwaysOn 可用性组。
指标名称指标键值单位描述
Mirror 相关
日志接收字节Log_Bytes_Received/secBytes/秒每秒收到的字节数。
重做字节Redone_Bytes/secBytes/秒在最后一秒在辅助数据库上重做的日志记录量。
剩余重做字节Redo_Bytes_RemainingBytes为完成还原阶段而要重做的剩余的日志量。
日志发送队列Log_Send_QueueKB尚未发送到镜像服务器的日志总字节数。
重做队列Redo_Queue次要副本的日志文件中尚未重做的日志记录量。
AlwaysOn 相关
重做完成预估时间AG_Redo_Finish_Time_Secs辅助副本完成未重做日志的预估时间。
从副本接收字节Bytes_Received_from_Replica/secBytes/秒每秒从远程可用性副本接收的字节数。
发送到副本字节Bytes_Sent_to_Replica/secBytes/秒每秒发送到远程可用性副本的字节数。
同步延迟AG_Sync_Lag_Secs在同步期间,辅助副本在主副本后的秒数。
重做队列大小AG_Redo_Queue_Size_KbKB辅助副本的日志文件中尚未重做的日志记录量。
发送队列大小AG_Send_Queue_Size_KbKB主数据库中尚未发送到辅助数据库的日志记录量。
日志发送队列 (AG)Log_Send_QueueKB主数据库的日志文件中尚未发送到次要副本的日志记录量。

其他指标

指标名称指标键值单位描述
备份还原吞吐量Backup_Restore_Throughput/secBytes/秒每秒数据库的备份和还原操作的读取/写入吞吐量。
批量复制行数Bulk_Copy_Rows/sec行/秒每秒大容量复制的行数。
批量复制吞吐量Bulk_Copy_Throughput/secKB/秒每秒大容量复制的数据量。
版本清理速率Version_Cleanup_Rate_Kb/secKB/秒从 tempdb 中的快照隔离版本存储区中删除的速率。
版本生成速率Version_Generation_rate_Kb/secKB/秒向 tempdb 中的快照隔离版本存储区中添加新行版本的速率。
DBCC 扫描字节DBCC_Logical_Scan_Bytes/secBytes/秒每秒数据库控制台命令 (DBCC) 的逻辑读取扫描字节数。
页 I/O 闩锁等待Page_IO_Latch_Waits与页 I/O 闩锁相关的统计信息。
页闩锁等待Page_Latch_Waits与页闩锁(不包括 I/O 闩锁)相关的统计信息。

说明

  1. 本文指标适用于 SQL Server 主流版本,但部分高可用性指标(如 Mirror 相关)在新版本中可能不再推荐使用。
  2. 单位中的 KBMBBytes 已做标准化处理,实际监控中请注意区分大小写及进制(1024 vs 1000)。
  3. 等待统计(Wait Stats)中的时间单位通常为毫秒 (ms),具体累积值需结合采集间隔计算速率。