mysql 查看慢查询
在 MySQL 中查看慢查询,可以通过以下几种方法:
1. 启用并配置慢查询日志
MySQL 的「慢查询日志」会记录执行时间超过指定阈值的 SQL 语句,默认未开启。需要以下步骤:
步骤 1:检查当前配置
-- 查看慢查询日志是否开启(ON/OFF) SHOW VARIABLES LIKE 'slow_query_log'; -- 查看慢查询日志文件路径 SHOW VARIABLES LIKE 'slow_query_log_file'; -- 查看慢查询阈值(单位:秒,默认 10 秒) SHOW VARIABLES LIKE 'long_query_time'; -- 是否记录未使用索引的查询(可选) SHOW VARIABLES LIKE 'log_queries_not_using_indexes';
步骤 2:动态开启(无需重启 MySQL)
-- 开启慢查询日志(临时生效,重启失效) SET GLOBAL slow_query_log = 'ON'; -- 设置慢查询阈值(例如设为 1 秒) SET GLOBAL long_query_time = 1; -- 可选:记录未使用索引的查询 SET GLOBAL log_queries_not_using_indexes = 'ON';
步骤 3:永久生效(修改配置文件)
修改 MySQL 配置文件(如 my.cnf 或 my.ini),添加以下内容:
[mysqld] slow_query_log = 1 slow_query_log_file = /var/log/mysql/mysql-slow.log long_query_time = 1 log_queries_not_using_indexes = 1
重启 MySQL 服务使配置生效。
2. 查看慢查询日志
直接查看日志文件内容(路径由 slow_query_log_file 指定):
# Linux/Mac 查看日志
sudo tail -f /var/log/mysql/mysql-slow.log
3. 使用工具分析慢查询日志
方法 1:mysqldumpslow(MySQL 自带)
汇总分析慢查询日志:
# 按总耗时排序 mysqldumpslow -s t /var/log/mysql/mysql-slow.log # 按出现次数排序 mysqldumpslow -s c /var/log/mysql/mysql-slow.log # 按单个查询的锁定时间排序 mysqldumpslow -s l /var/log/mysql/mysql-slow.log # 查看帮助 mysqldumpslow --help
方法 2:pt-query-digest(Percona Toolkit)
更强大的第三方工具(需安装):
# 安装 Percona Toolkit(以 Ubuntu 为例)
sudo apt-get install percona-toolkit
# 分析慢查询日志
pt-query-digest /var/log/mysql/mysql-slow.log
4. 直接查询 information_schema
通过系统表查看慢查询(需开启 slow_query_log):
-- 查看最近记录的慢查询
SELECT * FROM information_schema.slow_log;
关键参数总结
参数 说明
slow_query_log 是否开启慢查询日志(ON/OFF)
slow_query_log_file 日志文件路径
long_query_time 慢查询阈值(单位:秒)
log_queries_not_using_indexes 是否记录未使用索引的查询
常见问题
1、日志文件权限问题
确保 MySQL 用户有权限写入日志文件路径。
2、动态设置 long_query_time 不生效
需重新连接 MySQL 会话,或直接在配置文件中修改。
3、日志过大
定期清理日志文件,或使用工具(如 logrotate)自动管理。
通过以上方法,您可以快速定位和分析 MySQL 慢查询,优化数据库性能。
发表评论