查看MySQL执行过的SQL语句,可根据不同需求选择以下方法:
实时查看正在执行的SQL- 使用SHOW PROCESSLIST;或SHOW FULL PROCESSLIST;命令,前者为精简版,后者能完没判整显示SQL文本。
- 查询INFORMATION_SCHEMA.PROCESSLIST表,使用SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE INFO IS NOT NULL;筛选活跃连接的执行信息。
查看历史执行SQL(需开启日志)通用日志- 临时开启:使用SET GLOBAL log_output = 'TABLE';和SET GLOBAL general_log = 'ON';,日志输出到表或文件。
- 查看日志:使用SELECT * FROM mysql.general_log ORDER BY event_time DESC;从表中查询。
- 永久开启:修改MySQL配置文件,添加general_log = 1和general_log_file = /var/log/mysql/general.log。
慢查询日志- 临时开枯辩改启:使用SET GLOBAL slow_query_log = 'ON';和SET GLOBAL long_query_time = 1;,记录执行超过1秒的SQL。
- 查看慢查询日志:通过SHOW VARIABLES LIKE 'slow_query_log_file';获取日志文件路径,直接查看文件内容。
通过Performance Schema查看最近执行SQL适用于MySQL 5.5+,需开启performance_schema,使用SELECT DIGEST_TEXT, EXECUTION_COUNT, SUM_TIMER_WAIT FROM performance_schema.events_statements_summary_by_digest ORDER BY LAST_SEEN DESC LIMIT 10;查看最近10条执行的SQL。
使用Profiling分析SQL执行详情- 开启Profiling:使用SET profiling = ON;开启会话级性能分析。
- 执行SQL后查看记录:使用SHOW PROFILES;列出所有执行过的SQL及耗时,使用SHOW PROFILE FOR QUERY 1;查看指定SQL执行详情。
注意事项生产环境慎用通用日志,会大量占用磁盘空间,建议仅临时开启排查问题。查看全局日志或其他用户的SQL需SUPER权限。使用灶肆SET GLOBAL general_log = 'OFF';临时关闭日志,或注释配置文件后重启MySQL永久关闭。