确定有执行超过阈值的慢SQL吗
值得学习!
我第一张图红框框起来的sql难道不是吗?
OCP SQL诊断中SlowSQL无数据显示的排查与解决方案
在使用 OceanBase Cloud Platform(OCP)进行数据库性能监控时,若发现 SQL诊断 → SlowSQL 页面没有数据显示,这是一个常见的运维问题。虽然系统可能存在慢查询,但数据未正确展示通常与配置、采集机制或查询条件有关。
以下是基于官方文档和最佳实践的完整排查流程与解决方法:
一、SlowSQL 的工作原理回顾
OCP 中的 SlowSQL 是指租户中单次执行响应时间超过一定阈值的 SQL,默认阈值为 100ms。其数据来源于 OBServer 节点的 SQL 审计信息和日志记录:
- 数据源 1:
GV$OB_SQL_AUDIT
虚拟表(集群级) - 数据源 2:OBServer 日志中的
[slow query]
记录 - 触发条件:SQL 执行时间 >
trace_log_slow_query_watermark
参数值
二、常见原因及排查步骤
1. 检查是否启用了 SQL 审计功能
这是最常见的根本原因。如果 enable_sql_audit
系统参数未开启,则 GV$OB_SQL_AUDIT
表不会记录任何 SQL 执行信息,导致 OCP 无法获取 SlowSQL 数据。
排查命令:
SHOW PARAMETERS WHERE NAME = 'enable_sql_audit';
如果返回值为 false
,需启用该功能:
ALTER SYSTEM SET enable_sql_audit = TRUE;
注意:此操作对性能影响极小,建议生产环境始终开启。
SHOW PARAMETERS WHERE NAME = ‘trace_log_slow_query_watermark’;
3. 验证是否存在真实的慢 SQL
即使开启了审计,如果没有满足条件的慢 SQL,OCP 自然也不会显示。
在 OBServer 上手动查询慢 SQL:
-- 查询执行时间大于 1 秒的 SQL
SELECT * FROM oceanbase.GV$OB_SQL_AUDIT
WHERE tenant_id = <your_tenant_id>
AND elapsed_time > 1000000
ORDER BY elapsed_time DESC
LIMIT 10;
- 若查询结果为空 → 当前确实无慢 SQL。
- 若有数据但 OCP 不显示 → 属于数据同步或展示问题。
4. 检查 OCP 数据刷新时间和筛选条件
OCP 的 SQL 诊断数据有一定延迟(一般 < 1 分钟)。请确认:
- 时间范围选择是否合理(例如不要选择“过去5分钟”而期望看到旧数据)
- 是否过滤了特定 OBServer、租户或内部 SQL
- 是否误用了关键字搜索导致结果为空
参考依据:租户 SQL 诊断
5. 查看 OBServer 日志确认慢 SQL 是否记录
作为最终验证手段,可登录 OBServer 节点查看日志中是否有 [slow query]
输出:
# 进入日志目录
cd /home/admin/oceanbase/log
# 查看所有慢查询日志
fgrep '[slow query]' observer.log | sed -e 's/|/\n/g' | more
# 根据 trace_id 查找特定慢 SQL
fgrep "<trace_id>" observer.log | sed -e 's/|/\n/g' | more
如果日志中有 [slow query]
但 OCP 未显示,则可能是 OCP 采集服务异常或网络中断。
三、总结:SlowSQL 无数据的可能原因汇总
原因 | 检查方式 | 解决方案 |
---|---|---|
enable_sql_audit 未开启 |
SHOW PARAMETERS LIKE 'enable_sql_audit' |
ALTER SYSTEM SET enable_sql_audit = TRUE; |
trace_log_slow_query_watermark 设置过高 |
同上 | 设为 100ms (推荐) |
实际无慢 SQL | 查询 GV$OB_SQL_AUDIT
|
优化业务逻辑或调整观察窗口 |
OCP 时间/筛选条件错误 | 检查页面筛选项 | 调整时间范围或清除过滤条件 |
OCP 采集服务异常 | 检查 OCP 监控状态 | 重启 OCP agent 或联系技术支持 |
– 开启 SQL 审计(必须) ALTER SYSTEM SET enable_sql_audit = TRUE;
– 设置慢查询阈值为 100ms(合理平衡灵敏度与噪音) ALTER SYSTEM SET trace_log_slow_query_watermark = ‘100ms’;
– 可选:增加审计缓存大小以保留更多历史 ALTER SYSTEM SET sql_audit_record_limit = 1000000;
结论
OCP SQL诊断中 SlowSQL 无数据显示,最常见原因是 enable_sql_audit
参数未开启。其次是 trace_log_slow_query_watermark
阈值设置不合理或查询条件不匹配。
只要确保:
- SQL 审计已开启,
- 慢查询阈值合理,
- 存在真实慢 SQL,
OCP 即可正常采集并展示 SlowSQL 数据。建议定期巡检上述参数,保障监控系统的有效性。
enable_record_trace_log参数打开了么
数据采集有一定的滞后性
这里默认单位不是毫秒吗
没有默认单位,这里要带上单位