面试官问:MySQL怎么查询每条语句的执行时刻?你会查么?

205 阅读1分钟

一、为什么需要记录SQL执行时间?

在数据库运维和性能分析中,精确掌握SQL语句的执行时刻至关重要。典型应用场景包括:

  • 审计追踪:合规要求下的操作记录存档
  • 故障排查:定位异常时间段的数据库操作
  • 性能分析:关联系统日志与SQL执行时间序列
  • 数据恢复:确定误操作发生的时间节点

二、原生方法:启用通用查询日志(General Log)

2.1 配置通用日志

-- 查看当前日志状态
SHOW VARIABLES LIKE 'general_log%';

-- 开启日志记录(临时生效)
SET GLOBAL general_log = 'ON';

-- 设置日志存储方式(FILE/TABLE)
SET GLOBAL log_output = 'FILE'; 

2.2 永久生效配置

修改my.cnf配置文件:

[mysqld]
general_log = 1
general_log_file = /var/log/mysql/mysql.log
log_output = FILE

2.3 日志格式解析

示例日志条目:

2024-03-20T14:35:22.123456Z	   10 Connect	user@localhost on db
2024-03-20T14:35:24.567890Z	   10 Query	SELECT * FROM orders WHERE id=100
2024-03-20T14:35:25.001234Z	   10 Quit

各字段说明:

  • 精确到微秒的时间戳
  • 线程连接ID
  • 操作类型(Connect/Query/Quit)
  • 执行的SQL语句

2.4 日志管理策略

-- 日志文件轮转
FLUSH LOGS;

-- 清理历史日志
PURGE BINARY LOGS BEFORE '2024-03-01 00:00:00';