常见问题 SQL Server性能慢查询
SQL Server 变慢了怎么系统性排查
数据库整体变慢的系统性排查路径:资源瓶颈、等待类型、慢查询定位,从引擎到应用的分层诊断。
发布于 2026/11/11
所属频道 SQL Server
简短答案
「变慢」先分层定位:是资源瓶颈(CPU/内存/磁盘/IO),还是个别慢查询,或锁等待。自上而下排查,别一上来就改索引。
排查路径
- 看资源瓶颈:
SELECT wait_type, wait_time_ms/signal_wait_time_ms
FROM sys.dm_os_wait_stats ORDER BY wait_time_ms DESC;
- 看谁在跑、在等什么:
SELECT session_id, status, wait_type, blocking_session_id,
command, login_name
FROM sys.dm_exec_requests;
- 对慢会话取当前 SQL 文本,核对执行计划(SSMS 中按 Ctrl+M 查看执行计划)。
- 判断是「数据量涨了」还是「执行计划变了」:索引缺失、统计信息过期是高频原因。
- 各版本性能特性(如查询优化器改进)以 SQL Server 2022 Developer 条目页核对。
- 资源侧确认机器 CPU/磁盘余量,瓶颈在机器则先扩容。
现象对照表
| 现象 | 优先查 |
|---|---|
| 全库慢、并发都卡 | 资源瓶颈(CPU/磁盘/IO) |
| 个别查询慢 | 执行计划与索引 |
| 间歇性卡死 | 锁等待与阻塞链 |
操作小结
- 先分层:资源 → 会话 → 查询计划。
dm_os_wait_stats与dm_exec_requests是起点。- 统计信息过期是高频根因,先更新统计信息再调索引。