查看慢日志明细

更新时间:
复制 MD 格式

本文介绍了RDS MySQL慢日志明细的查看方法,以及慢日志的相关问题及其解决方案,包括SQL记录规则、截断问题、时间差异原因以及统计个数差异等。

功能简介

RDS MySQL慢日志功能默认开启,详情请参见RDS MySQL慢日志的采集策略。查看其它类型日志,请参见查看错误日志和慢日志

注意事项

  • 如果一分钟内实例中产生的慢日志超过600条,可能会导致慢日志丢失。您可以通过升级内核小版本20191212版本以上减少该情况。

  • 如果SQL语句长度超过8192字节,慢SQL将无法记录完整的SQL内容。此外,SQL洞察日志也无法记录完整SQL。截断长度受 loose_rds_audit_max_sql_size(MySQL 5.6/5.7)或 loose_rds_audit_log_event_buffer_size(MySQL 8.0/8.4)参数影响,默认值为 8192 字节,可在 RDS 控制台的参数设置页面修改;截断长度取 8192 字节与参数值的最小值。如果需要明确完整SQL内容,建议从应用端定位完整的SQL请求内容。

通过慢SQL页面查询

  1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。

  2. 在左侧导航栏选择自治服务 > SQL

  3. 慢日志分析页签下,选择需要查看的时间范围后,即可查看到对应的慢日志统计和慢日志明细。

    慢日志统计的平均执行时间单位为秒,全量 SQL 统计的平均耗时单位为毫秒 (ms)。两个模块使用不同的时间粒度,分别对应不同的 API:慢日志统计对应DescribeSlowLogs(返回秒),全量 SQL 统计对应DescribeSQLLogReportList(返回毫秒)。

    说明

    您也可以访问RDS实例详情页的日志管理页面,在慢日志明细页签下查看慢日志明细。

    重要
    • 慢日志明细中包含 SQL 语句、访问来源、数据库、执行耗时等信息,其中用户字段显示的是执行该 SQL 的数据库账号名称,不是当前登录阿里云控制台的 RAM 用户;该字段仅在自治服务 > SQL > 慢日志明细页签下显示,通过实例详情页日志管理 > 慢日志明细页签查看的慢日志明细不包含此字段。此外,慢日志采集时间的统计规则在早期版本中,该时间为 SQL 执行结束时间,而自 20211231(5.7.35)、20220530(8.0.25)起,该时间为 SQL 开始执行的时间。

    • 如果您需要导出慢日志明细,请参见慢日志分析

常见问题

什么样的SQL会进入RDS MySQL慢日志中?

  • 基于执行时间:执行时间超过参数long_query_time配置阈值的SQL会被记录到慢日志中。默认值为1秒,即未调整慢日志阈值的情况下,执行时间超过1秒的SQL会被记录。

  • 基于索引使用情况:如果参数log_queries_not_using_indexes=ON,即使SQL执行时间未超过long_query_time,未使用索引的SQL也会被记录到慢日志中。默认情况下,log_queries_not_using_indexes参数为OFF。

为什么RDS MySQL慢日志记录的SQL执行完成时间与实际SQL执行时间不同?

通常情况下可能是执行SQL语句修改了时区。慢日志记录的SQL执行时间的时区,存在会话级别、数据库级别和系统级别。慢日志时区设置逻辑如下:

当数据库存在时区时,以数据库的时区为准,否则以系统时区为准。当通过SQL语句修改了会话级别的时区时,可能导致慢日志记录的时区无法正常转换,从而出现时间差异。

为什么SHOW PROCESSLIST查看到的会话SQL执行时间超过了慢日志阈值,但未被记录到RDS MySQL慢日志中?

如果通过SHOW PROCESSLIST查看到的会话SQL执行时间超过慢日志阈值,但未被记录到慢日志中,通常是因为该SQL被手动或自动KILL掉。在这种情况下,对应的SQL不会被记录到慢日志明细中。