慢查询的配置

背景:

  1. 配置项中存在 trace_log_slow_query_watermark :用于设置查询的执行时间阈值,如果查询的执行时间超过该阈值,则被认为是慢查询,慢查询的追踪日志会被打印到系统日志中。
  2. 全局变量中 long_query_time 用于设置慢查询的阈值。执行时间超过这个值的查询会被记录在慢查询日志中。

问题:

  1. 这两个参数貌似一致?不明白具体区别
  2. 在ob中,存在慢查询日志吗?慢查询的数据不是存储在系统日志observer.log中吗?
1 个赞

@论坛小助手

根据文档库中的信息,以下是对您问题的详细解答:

1. trace_log_slow_query_watermarklong_query_time 的区别

trace_log_slow_query_watermark

  • 功能描述:用于设置查询的执行时间阈值。如果查询的执行时间超过该阈值,则被认为是慢查询,慢查询的追踪日志会被打印到系统日志中(如 observer.log)。
  • 适用范围:适用于 OceanBase 数据库的所有模式(包括 Oracle 模式和 MySQL 模式)。
  • 日志记录位置:慢查询的相关信息会记录在 OBServer 的系统日志中(observer.log)。
  • 参考文档:[trace_log_slow_query_watermark → 功能描述](trace_log_slow_query_watermark → 功能描述)

long_query_time

  • 功能描述:用于设置慢查询的阈值。执行时间超过这个值的查询会被记录在慢查询日志中。
  • 适用范围:仅适用于 OceanBase 数据库的 MySQL 模式
  • 日志记录位置:慢查询会被记录在专门的 慢查询日志 中(而非系统日志 observer.log)。
  • 参考文档:[long_query_time → 功能描述](long_query_time → 功能描述)

区别总结

参数名称 功能描述 适用模式 日志记录位置
trace_log_slow_query_watermark 设置慢查询阈值,超时的查询会被记录到系统日志 observer.log 中。 所有模式(Oracle 和 MySQL) 系统日志 observer.log
long_query_time 设置慢查询阈值,超时的查询会被记录到专门的慢查询日志中。仅适用于 MySQL 模式。 MySQL 模式 慢查询日志

2. OceanBase 中是否存在慢查询日志?

慢查询日志的存在性

  • 在 OceanBase 数据库中,确实存在慢查询日志的功能。
  • 对于 MySQL 模式:慢查询会被记录到专门的慢查询日志中(通过 long_query_time 配置)。
  • 对于所有模式:慢查询的信息也会被记录到系统日志 observer.log 中(通过 trace_log_slow_query_watermark 配置)。

如何配置慢查询日志

  • 配置 trace_log_slow_query_watermark

    ALTER SYSTEM SET trace_log_slow_query_watermark='100ms';
    
    • 该配置项从 V2.2.50 版本开始引入。
    • 参考文档:[trace_log_slow_query_watermark → 配置示例](trace_log_slow_query_watermark → 配置示例)
  • 配置 long_query_time(仅适用于 MySQL 模式):

    SET GLOBAL long_query_time = 1; -- 单位为秒
    

3. 慢查询数据存储位置

  • trace_log_slow_query_watermark:慢查询数据存储在系统日志 observer.log 中。
  • long_query_time:慢查询数据存储在专门的慢查询日志文件中(MySQL 模式下)。

总结

  • trace_log_slow_query_watermarklong_query_time 的主要区别在于适用模式和日志记录位置。
  • 如果您使用的是 MySQL 模式,建议同时配置 long_query_timetrace_log_slow_query_watermark,以便分别查看慢查询日志和系统日志中的慢查询信息。
  • 如果您使用的是 Oracle 模式,只能依赖 trace_log_slow_query_watermark 来记录慢查询信息到系统日志中。

具体信息可参考以下文档:

  1. trace_log_slow_query_watermark
  2. long_query_time
  3. trace log
  4. 备份架构
  5. syslog_compress_func
  6. ls_gc_delay_time
1 个赞

@论坛小助手 long_query_time 设置慢查询阈值,超时的查询会被记录到专门的慢查询日志中。使用什么变量配置路径?还是说有默认的路径

根据文档库中的信息,关于 long_query_time 的配置以及慢查询日志路径的问题,以下是详细解答:

  1. long_query_time 配置慢查询阈值

    • long_query_time 用于设置慢查询的阈值(单位为秒)。执行时间超过这个值的查询会被记录到专门的慢查询日志中。
    • 配置示例:
      SET GLOBAL long_query_time = 10; -- 设置全局慢查询阈值为 10 秒
      SET long_query_time = 10; -- 设置当前会话的慢查询阈值为 10 秒
      
    • 参考文档:[long_query_time → 配置示例](long_query_time → 配置示例)
  2. 慢查询日志路径配置

    • OceanBase 数据库中,慢查询日志的路径可以通过变量 slow_query_log_path 进行配置。
    • 默认情况下,慢查询日志的路径为 OceanBase 数据库的运行目录下的 slow_query.log 文件。例如,默认路径可能是:
      /data/oblog/slow_query.log
      
    • 如果需要修改慢查询日志的路径,可以通过以下方式设置:
      ALTER SYSTEM SET slow_query_log_path='/custom/path/to/slow_query.log';
      
    • 注意:slow_query_log_path 的具体配置方法和默认值可能因版本不同而有所差异,请根据实际使用的 OceanBase 版本确认。
  3. 默认路径总结

    • 如果未显式配置 slow_query_log_path,OceanBase 数据库会将慢查询日志记录到默认路径下的 slow_query.log 文件中。
    • 默认路径通常为 OceanBase 数据库的运行目录,例如 /data/oblog/ 或其他安装时指定的目录。
  4. 注意事项

    • long_query_time 仅适用于 OceanBase 数据库的 MySQL 模式。如果您使用的是 Oracle 模式,则需要依赖 trace_log_slow_query_watermark 来记录慢查询信息到系统日志中(如 observer.log)。
    • 慢查询日志的启用状态可以通过变量 slow_query_log 控制,默认值为 ON,表示启用慢查询日志功能。如果需要关闭慢查询日志,可以执行以下命令:
      SET GLOBAL slow_query_log = OFF;
      

综上所述,long_query_time 的慢查询日志默认存储在 slow_query.log 文件中,路径可以通过变量 slow_query_log_path 配置。如果没有显式配置路径,则使用默认路径。

更多信息请查看:

  1. long_query_time
  2. trace_log_slow_query_watermark
  3. GV$OB_SQL_AUDIT
  4. 设置日志同步限速
  5. 日志归档前准备
  6. SQL 性能问题的典型场景和排查思路
  7. ob_max_read_stale_time
1 个赞

实际上,没有slow_query_log_path这个变量

没有 slow_query_log_path 小助手回答有误,日志应该也是写到observer日志中的