慢 SQL 监控

慢 SQL 监控

1. 功能概述

慢 SQL 监控功能帮助 DBA 和开发者实时发现数据库中的性能瓶颈。通过监控执行时间超过阈值的 SQL 语句,分析历史 Top SQL,以及查看锁等待链,快速定位并解决性能问题。

核心能力:

  • 实时慢 SQL 监控,支持自定义阈值
  • 历史 Top SQL 统计与排序
  • 阻塞链分析,可视化锁依赖关系
  • 在线 EXPLAIN 执行计划分析
  • 一键终止问题会话

2. 进入慢 SQL 监控

慢 SQL 监控集成在 服务器管理 中。操作步骤:

  1. 进入 数据源管理 页面
  2. 找到目标数据源,点击操作栏的 服务器管理 按钮
  3. 在弹出的服务器管理窗口中,切换到 慢 SQL 标签页

前提条件:系统会自动进行前置检查(如 MySQL 的 performance_schema 是否启用)。如果不满足条件,页面顶部会显示提示信息。


3. 实时慢 SQL

实时慢 SQL 标签页展示当前正在执行的、超过设定阈值的 SQL 语句。

3.1 阈值设置

在页面顶部的下拉框中选择慢 SQL 阈值:

阈值 适用场景
1 秒 高并发 OLTP 系统,对响应时间敏感
2 秒 常规 Web 应用
5 秒 混合负载系统
10 秒 报表类查询为主
30 秒 数据仓库、批量处理
60 秒 仅关注极端慢查询

选择阈值后,点击 刷新 按钮加载数据。

3.2 列表说明

列名 说明
会话 ID 数据库会话标识
用户 执行 SQL 的数据库用户
数据库 目标数据库名
执行时长 SQL 已执行时间。红色表示超过 10 秒,橙色表示超过 5 秒
SQL 文本 正在执行的 SQL 语句
等待事件 当前等待的事件类型
标签 自动分类标记
操作 EXPLAIN(查看执行计划)、KILL(终止会话)

3.3 自动标签

系统会根据 SQL 的状态自动添加标签:

  • 阻塞链(红色):该 SQL 正在阻塞其他会话
  • 阻塞源(橙色):该 SQL 被其他会话阻塞
  • 严重超时:执行时间远超阈值
  • 全表扫描:检测到全表扫描操作

3.4 终止会话

对于长时间阻塞或异常的会话,可以点击 KILL 按钮终止。系统会弹出确认对话框,确认后执行 KILL 命令。

注意:终止会话会中断正在执行的操作,请确认该会话可以安全终止。


4. 历史 Top SQL

历史 Top SQL 标签页展示数据库中累计执行次数最多或平均耗时最长的 SQL 语句。

4.1 列表说明

列名 说明
SQL SQL 语句文本
调用次数 累计执行次数(可排序)
平均耗时 平均执行时间(可排序)
操作 EXPLAIN(查看执行计划)

4.2 使用建议

  • 按 调用次数 排序,找出频繁执行的 SQL,考虑添加缓存或优化
  • 按 平均耗时 排序,找出最慢的 SQL,重点优化执行计划
  • 点击 EXPLAIN 查看执行计划,分析是否存在全表扫描等问题

5. 阻塞链

阻塞链标签页展示当前数据库中的锁等待关系,帮助快速识别阻塞源头。

5.1 列表说明

列名 说明
阻塞者 ID 持有锁的会话 ID(红色标签)
被阻塞 ID 等待锁的会话 ID(橙色标签)
深度 阻塞链的深度,1 表示直接阻塞

5.2 分析方法

  1. 找到 阻塞者 ID,这是持有锁且未释放的会话
  2. 查看对应的 被阻塞 ID,了解有多少会话被阻塞
  3. 在 实时慢 SQL 标签页中找到阻塞者的 SQL 语句
  4. 决定是否需要终止阻塞者会话,或使用 EXPLAIN 分析其执行计划

6. 执行计划分析

EXPLAIN 功能帮助分析 SQL 的执行计划,找出性能瓶颈。

6.1 使用步骤

  1. 在实时慢 SQL 或历史 Top SQL 列表中,点击 EXPLAIN 按钮
  2. 弹出 EXPLAIN 对话框,显示原始 SQL
  3. 可以编辑 SQL 文本(如添加提示、修改条件等)
  4. 点击 执行 EXPLAIN 按钮
  5. 查看执行计划结果

6.2 结果展示

  • 普通格式:以表格形式展示执行计划(适用于 MySQL、PostgreSQL 等)
  • XML 格式:SQL Server 返回 XML 格式的执行计划,系统会自动格式化缩进

6.3 复制结果

点击 复制 按钮可以将执行计划复制到剪贴板,方便粘贴到文档或分享给团队。


7. 支持的数据库

数据库 支持情况 说明
MySQL 完整支持 需要启用 performance_schema
PostgreSQL 完整支持 通过 pg_stat_activity 和 pg_stat_statements
SQL Server 完整支持 通过 DMV 视图
Oracle 部分支持 通过 V$SESSION 和 V$SQL
SQLite 不支持 SQLite 为嵌入式数据库,无独立进程监控

8. 最佳实践

  1. 定期巡检:每天查看历史 Top SQL,提前发现潜在性能问题
  2. 合理设置阈值:根据业务场景选择合适的阈值,避免过多噪音或遗漏
  3. 结合执行计划:发现慢 SQL 后,务必使用 EXPLAIN 分析执行计划
  4. 谨慎终止会话:终止前确认该会话不是关键业务操作
  5. 关注阻塞链:阻塞链会导致大量请求堆积,应优先处理