#慢日志管理

# 慢日志启动和关闭

通过设置ENABLE_SLOW_LOG参数来控制慢日志记录的启动和关闭,默认关闭。

慢日志不适用于分布式部署。

示例(单机、共享集群部署)

--查看当前慢日志是否打开
SHOW PARAMETER ENABLE_SLOW_LOG;
NAME                VALUE     
------------------- ----------
ENABLE_SLOW_LOG     FALSE        

--关闭慢日志
ALTER SYSTEM SET ENABLE_SLOW_LOG = FALSE;

--开启慢日志
ALTER SYSTEM SET ENABLE_SLOW_LOG = TRUE;

# 设置慢日志时间阈值

通过设置SLOW_LOG_TIME_THRESHOLD参数来控制慢日志中的时间阈值,单位为毫秒,执行时间大于时间阈值的SQL会被认为慢SQL而记录到慢日志中。

示例(单机、共享集群部署)

--查看当前慢日志时间阈值
SHOW PARAMETER SLOW_LOG_TIME_THRESHOLD
NAME                        VALUE     
--------------------------- ----------
SLOW_LOG_TIME_THRESHOLD     1000        

--设置时间阈值
ALTER SYSTEM SET SLOW_LOG_TIME_THRESHOLD = 2000;

# 设置慢日志记录的SQL最大长度

通过设置SLOW_LOG_SQL_MAX_LEN参数来控制慢日志中的记录的SQL语句的最大长度,单位为字节,超过该值的SQL会被截断记录。

示例(单机、共享集群部署)

--查看当前慢日志记录的SQL最大长度
SHOW PARAMETER SLOW_LOG_SQL_MAX_LEN
NAME                        VALUE     
--------------------------- ----------
SLOW_LOG_SQL_MAX_LEN        2000        

--设置慢日志记录的SQL最大长度
ALTER SYSTEM SET SLOW_LOG_SQL_MAX_LEN = 1000;

# 设置慢日志文件名

通过设置SLOW_LOG_FILE_NAME参数来控制慢日志文件名。

示例(单机、共享集群部署)

--查看当前慢日志文件名
SHOW PARAMETER SLOW_LOG_FILE_NAME
NAME                      VALUE     
------------------------- ----------
SLOW_LOG_FILE_NAME        slow.log

--设置慢日志文件名
ALTER SYSTEM SET SLOW_LOG_FILE_NAME = myslow.LOG SCOPE = SPFILE;

# 设置慢日志文件的存储路径

通过设置SLOW_LOG_FILE_PATH参数来控制慢日志文件的存储路径。

示例(单机、共享集群部署)

--查看当前慢日志文件的存储路径
SHOW PARAMETER SLOW_LOG_FILE_PATH
NAME                    VALUE     
----------------------- ------------
SLOW_LOG_FILE_PATH      ?/slow/log

--设置慢日志文件的存储路径
ALTER SYSTEM SET SLOW_LOG_FILE_PATH = '/home/user/log/slow/' SCOPE = SPFILE;

# 设置慢日志记录的输出方式

通过设置SLOW_LOG_OUTPUT参数来控制慢日志记录的输出方式,目前支持TABLE和FILE类型:

  • TABLE:慢日志输出到SLOW_LOG$系统表内。

  • FILE:慢日志输出到慢日志文件内。

示例(单机、共享集群部署)

--查看当前慢日志记录的输出方式
SHOW PARAMETER SLOW_LOG_OUTPUT
NAME                      VALUE     
----------------       ------------
SLOW_LOG_OUTPUT           FILE

--设置慢日志记录的输出方式
ALTER SYSTEM SET SLOW_LOG_OUTPUT = 'FILE';

# 日志归档

慢日志记录文件大小没有设置上限,当slow.log文件或SLOW_LOG$表过大时需要手动清理。

Note

  • 慢日志采用异步输出方式,即执行完不会立即输出,而是放到日志队列里,通过后台线程分批次输出。

  • 日志队列最大长度256,线程每200ms输出64条记录。

  • 基于上述原理,在掉电情况下可能会丢失日志;如果时间阈值设置过小,致使队列满的情况下亦会丢失日志。

  • 主备环境中,备库将SLOW_LOG_OUTPUT设置为FILE时,慢日志输出到文件,将备库的SLOW_LOG_OUTPUT设置为TABLE不会报错但不会生效,日志也不会继续输出到文件。备库SLOW_LOG$的内容是直接同步的主库的SLOW_LOG$。

  • 根据上条规则,不建议将备库的SLOW_LOG_OUTPUT设为TABLE;如一个TABLE模式的主库被切换为备库,请注意其慢日志将无法输出,需修改SLOW_LOG_OUTPUT参数为FILE使慢日志能输出到文件。