慢sql 记录问题

【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】ob, ocp
【 使用版本 】ob 4.4.2 社区版,ocp 4.4.2 社区版
【问题描述】清晰明确描述问题



我在ocp 慢sql 中看到一个慢sql ,update 需要2.7秒(如图一),于是我想看下trace log 中这个sql 为什么这么慢,但是我到对应的observer 上的observer.log 中找这条慢sql ,是空的,这个是为什么,ocp 的慢sql 和集群的慢sql 参数我都配置的1秒

10 个赞

了解了解

2 个赞

可能日志轮转/文件不对:当前 observer.log 可能已是新文件,慢 SQL 发生在旧日志(如 observer.log.20260727*)中;或该 SQL 由其他 OBServer 节点处理,本地无记录 。

3 个赞

explain 下。

1 个赞

@论坛小助手

1 个赞

问题分析

根据您的描述,您在 OCP 中发现了一个慢 SQL(更新操作耗时 2.7 秒),但当您尝试在对应的 Observer 的 observer.log 文件中查找该 SQL 的执行日志时,却没有找到相关信息。这种现象可能有以下几个原因:

  1. 慢查询日志记录配置:虽然您提到已经将 OCP 和集群的慢 SQL 参数都配置为 1 秒,但请确保这些配置确实已经生效,并且没有被其他配置覆盖。
  2. 日志级别:请确认 observer.log 的日志级别是否足够详细,以便包含慢查询的日志信息。通常,需要将日志级别设置为 INFO 或更低级别才能看到详细的 SQL 执行日志。
  3. 日志文件滚动:如果 observer.log 文件进行了滚动(例如,按时间或大小滚动),那么您可能需要检查其他日志文件,如 observer.log.1observer.log.2 等。
  4. SQL 被优化:某些情况下,OceanBase 的优化器可能会对 SQL 进行优化,导致实际执行时间小于配置的阈值。在这种情况下,该 SQL 可能不会被记录为慢查询。

解决方案

  1. 检查慢查询日志配置

    • 确认 OceanBase 集群中的慢查询日志参数配置是否正确。可以通过以下命令查看和设置慢查询日志参数:
      -- 查看当前慢查询日志配置
      SHOW VARIABLES LIKE 'slow_query_log';
      SHOW VARIABLES LIKE 'long_query_time';
      
      -- 设置慢查询日志阈值为 1 秒
      SET GLOBAL slow_query_log = 1;
      SET GLOBAL long_query_time = 1;
      
  2. 检查日志级别

    • 确认 observer.log 的日志级别是否为 INFO 或更低。可以通过以下命令查看和设置日志级别:
      -- 查看当前日志级别
      SHOW VARIABLES LIKE 'log_level';
      
      -- 设置日志级别为 INFO
      SET GLOBAL log_level = 'INFO';
      
  3. 检查日志文件滚动

    • 如果 observer.log 文件进行了滚动,请检查其他日志文件,如 observer.log.1observer.log.2 等,以确保没有遗漏相关日志信息。
  4. 检查 SQL 优化情况

    • 如果上述步骤都没有解决问题,可能是 SQL 被优化了,导致实际执行时间小于配置的阈值。您可以尝试手动运行该 SQL 并使用 EXPLAIN 命令来查看其执行计划,以进一步分析性能瓶颈。

结论

通过以上步骤,您应该能够找到慢 SQL 的执行日志并进一步分析其性能问题。如果仍然无法找到相关信息,建议联系 OceanBase 的技术支持团队以获取更多帮助。

详情请参考:

  1. 分布式执行计划管理
  2. oceanbase.DBA_OB_BACKUP_TASK_HISTORY
  3. 初始化集群
1 个赞

说的不对,不要误导大家

1 个赞

学习了,sql_audit

1 个赞

找到原因了,是因为虽然设置了慢sql 参数 trace_log_slow_query_watermark = 1s,
但是这并不会让observer 把 慢sql 记录到observer.log 中,还要设置

enable_record_trace_log = true ,这样才会把慢sql 记录到observer.log ,

这里有介绍

主要作用

enable_record_trace_log 参数的主要作用是将 OBServer 端的慢 SQL 执行日志都记录到 observer.log 日志中去。因此,如果把 enable_record_trace_log 参数设置 false,会导致在 observer.log 日志中查看不到 slow query 的信息。

1 个赞

666

小助手回答的有问题

学习了

了解