OCP的SQL诊断中slowsql没有数据




设置了对应参数,为何这个查询没有在slowsql中显示

2 个赞

确定有执行超过阈值的慢SQL吗

1 个赞

值得学习!

我第一张图红框框起来的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 参数值

:link: 诊断分析 → SQL 诊断
:link: SQL 诊断 → OCP 监控

二、常见原因及排查步骤

:white_check_mark: 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;

:warning: 注意:此操作对性能影响极小,建议生产环境始终开启。

:pushpin: 参考依据:OceanBase Sysbench 性能问题分析

SHOW PARAMETERS WHERE NAME = ‘trace_log_slow_query_watermark’;

:white_check_mark: 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 不显示 → 属于数据同步或展示问题。

:white_check_mark: 4. 检查 OCP 数据刷新时间和筛选条件

OCP 的 SQL 诊断数据有一定延迟(一般 < 1 分钟)。请确认:

  • 时间范围选择是否合理(例如不要选择“过去5分钟”而期望看到旧数据)
  • 是否过滤了特定 OBServer、租户或内部 SQL
  • 是否误用了关键字搜索导致结果为空

:pushpin: 参考依据:租户 SQL 诊断

:white_check_mark: 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 阈值设置不合理或查询条件不匹配。

只要确保:

  1. SQL 审计已开启,
  2. 慢查询阈值合理,
  3. 存在真实慢 SQL,

OCP 即可正常采集并展示 SlowSQL 数据。建议定期巡检上述参数,保障监控系统的有效性。

enable_record_trace_log参数打开了么

数据采集有一定的滞后性

trace_log_slow_query_watermark

这里修改错了,应该是1000s 不是1000,另外看你的SQL目前没有超过1000s的

1 个赞

这里默认单位不是毫秒吗

1 个赞

没有默认单位,这里要带上单位

1 个赞