iowait
值高),系统响应缓慢。主要原因是机械硬盘(HDD)随机读写速度慢、磁盘碎片过多或RAID配置不合理。innodb_buffer_pool_size
(InnoDB缓冲池)设置过小,无法缓存足够的数据和索引。%user
或%system
指标高),查询处理速度下降。主要原因是复杂SQL计算(如大量JOIN、子查询)、高并发连接或索引缺失导致的全表扫描。innodb_buffer_pool_size
(InnoDB核心缓冲池)未根据服务器内存调整(建议设置为物理内存的50%-75%),导致频繁从磁盘读取数据。max_connections
(最大连接数)设置过低,无法应对高并发请求,导致连接排队等待;或连接池配置不当,造成连接泄漏。innodb_log_file_size
(InnoDB日志文件大小)过小(如默认的5M),导致日志切换频繁,影响写入性能;tmp_table_size
(临时表大小)设置过小,导致大查询使用磁盘临时表,降低速度。top
/htop
:实时查看系统CPU、内存、进程状态,定位高资源占用的MySQL进程。vmstat
:监控系统整体性能(如CPU、内存、I/O),识别系统级瓶颈(如wa
值高表示磁盘I/O等待)。iostat
:查看磁盘I/O详细指标(如tps
、await
),判断磁盘是否成为瓶颈。SHOW PROCESSLIST
:查看当前MySQL连接及执行的SQL语句,识别长时间运行的查询(Time
列值大)。key
列)、是否进行了全表扫描(type
列为ALL
)、是否使用了临时表(Extra
列有Using temporary
)。innodb_buffer_pool_size
、query_cache_size
),给出优化建议(如调整缓冲池大小、关闭不必要的功能)。innodb_buffer_pool_size
足够缓存热点数据和索引(建议占物理内存的50%-75%)。my.cnf
文件,设置innodb_buffer_pool_size
为物理内存的50%-75%(如8G内存设置为6G),并重启MySQL服务。max_connections
(如设置为200-500),同时使用连接池(如HikariCP)减少连接创建/销毁开销。innodb_log_file_size
(如设置为256M-512M),减少日志切换频率;增大tmp_table_size
和max_heap_table_size
(如设置为256M),避免大查询使用磁盘临时表。ALTER TABLE users ADD INDEX idx_username (username)
),避免全表扫描。SELECT *
(只选择需要的列),减少数据传输量;将子查询转换为JOIN(如SELECT a.* FROM table_a a JOIN table_b b ON a.id = b.a_id
),提升查询效率;使用LIMIT
分页(如SELECT * FROM orders LIMIT 1000, 20
),避免大偏移量查询。ANALYZE TABLE
更新表的统计信息,帮助优化器选择更优的执行计划;使用OPTIMIZE TABLE
整理表碎片(针对MyISAM或InnoDB表),提升查询速度。mysqldump
或Percona XtraBackup),并测试恢复流程,确保数据安全。