以下是在Ubuntu上排查MySQL性能瓶颈的常用方法:
一、查看系统资源状态
- 基础资源监控:使用
top、htop、vmstat、iostat命令查看CPU、内存、磁盘I/O等系统资源使用情况,判断是否存在资源不足。 - 磁盘空间检查:通过
df -h命令确认磁盘空间是否充足,避免因空间不足导致性能下降。
二、分析MySQL运行状态
- 查看错误日志:通过
sudo tail -f /var/log/mysql/error.log查看错误日志,排查异常错误。 - 检查配置参数:查看
/etc/mysql/my.cnf或/etc/mysql/mysql.conf.d/mysqld.cnf,重点关注innodb_buffer_pool_size、max_connections等关键参数是否合理。
三、定位慢查询问题
- 启用慢查询日志:在配置文件中设置
slow_query_log=1、long_query_time=2(单位:秒),记录执行时间超过阈值的SQL语句。 - 分析慢查询日志:使用
pt-query-digest /var/log/mysql/slow.log工具分析慢查询,找出耗时高的查询语句及优化方向(如添加索引、优化SQL逻辑)。 - 使用EXPLAIN分析执行计划:对慢查询语句执行
EXPLAIN,查看是否使用索引、是否存在全表扫描等问题。
四、监控数据库性能指标
- 实时状态监控:通过
SHOW STATUS、SHOW GLOBAL STATUS、SHOW PROCESSLIST命令查看连接数、缓冲池命中率、锁等待等指标。 - InnoDB状态监控:使用
SHOW ENGINE INNODB STATUS查看InnoDB存储引擎的详细状态,如锁等待、事务日志等。
五、优化建议
- 索引优化:为高频查询字段添加索引,避免全表扫描;定期使用
OPTIMIZE TABLE整理表碎片。 - 配置参数调优:根据服务器硬件配置调整
innodb_buffer_pool_size(建议设置为服务器内存的50%-80%)、innodb_log_file_size等参数。 - 工具辅助优化:使用
mysqltuner分析配置并给出优化建议,或通过Prometheus+Grafana实现可视化监控。
六、其他工具
- Percona Toolkit:包含
pt-query-digest、pt-kill等工具,用于慢查询分析、自动终止慢查询等。