swappiness参数设置为10以下),确保InnoDB缓冲池等内存组件有足够空间。/etc/sysctl.conf文件,优化TCP连接和文件描述符限制:# 增加本地端口范围
net.ipv4.ip_local_port_range = 1024 65535
# 启用TCP连接重用,减少TIME_WAIT状态
net.ipv4.tcp_tw_reuse = 1
# 加快TCP连接回收
net.ipv4.tcp_tw_recycle = 1
# 增加系统最大文件描述符(MySQL连接数上限依赖此值)
fs.file-max = 65535
执行sysctl -p使配置生效。MySQL配置文件通常位于/etc/mysql/my.cnf或/etc/mysql/mysql.conf.d/mysqld.cnf,需根据服务器硬件和工作负载调整以下关键参数:
innodb_buffer_pool_size是InnoDB性能的核心参数,建议设置为服务器总内存的50%-80%(如16GB内存可设为12GB),用于缓存数据和索引,减少磁盘I/O。max_connections根据应用并发需求设置(如500-1000),避免过多连接导致内存耗尽;同时设置wait_timeout(空闲连接超时,如600秒)和interactive_timeout(交互式连接超时,如600秒),释放闲置连接。innodb_log_file_size设置为InnoDB缓冲池大小的25%-50%(如3GB缓冲池可设为1GB),减少日志切换频率;innodb_flush_log_at_trx_commit根据数据安全性需求设置(1为最安全,每次提交都刷日志;0或2提升性能但可能丢失部分数据,适用于允许短暂丢失的场景)。tmp_table_size和max_heap_table_size设置为64M-256M(如128M),控制内存中临时表的大小,避免大临时表溢出到磁盘;sort_buffer_size、join_buffer_size等排序和连接缓冲区设置为2M-8M(如4M),提升排序和JOIN操作性能。EXPLAIN关键字,查看执行计划(如是否使用索引、扫描行数、JOIN类型),识别全表扫描、未使用索引等问题。例如:EXPLAIN SELECT * FROM users WHERE user_id = 100;
user_id、order_date)创建索引,提升查询速度;(user_id, order_date))优化多条件查询,遵循最左前缀原则(如WHERE user_id=100 AND order_date='2025-01-01'可使用该索引);SELECT *,只选择需要的列(如SELECT username, email FROM users),减少数据传输量;LIMIT分页(如SELECT * FROM users ORDER BY id LIMIT 10 OFFSET 0),避免一次性返回大量数据;WHERE YEAR(create_time)=2025),会导致索引失效,可改用WHERE create_time BETWEEN '2025-01-01' AND '2025-12-31';CREATE INDEX idx_user_id ON users(user_id))。(user_id, order_date)可优化WHERE user_id=100 ORDER BY order_date DESC的查询。ANALYZE TABLE(如ANALYZE TABLE users)更新表统计信息,帮助优化器选择正确索引;使用OPTIMIZE TABLE(如OPTIMIZE TABLE users)整理表碎片,提升索引访问效率。DROP INDEX删除,减少写操作开销。DELETE FROM logs WHERE create_time < DATE_SUB(NOW(), INTERVAL 30 DAY))、无效数据(如已删除用户的订单),减少表数据量。OPTIMIZE TABLE(如OPTIMIZE TABLE orders),整理数据碎片,提升查询性能;对于InnoDB表,也可使用ALTER TABLE重建表(如ALTER TABLE orders ENGINE=InnoDB)。ANALYZE TABLE更新表的统计信息,确保优化器能选择最优的执行计划(如ANALYZE TABLE products)。mysqldump或物理备份工具(如Percona XtraBackup)备份数据,防止数据丢失(如每天凌晨备份)。long_query_time=1秒),通过分析慢查询日志找出性能瓶颈。设置方法:SET GLOBAL slow_query_log = ON;
SET GLOBAL long_query_time = 1;
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';
或在配置文件中永久设置:[mysqld]
slow_query_log = ON
long_query_time = 1
slow_query_log_file = /var/log/mysql/slow.log
mysqladmin:查看服务器状态(如mysqladmin status、mysqladmin extended-status);pt-query-digest(Percona Toolkit):分析慢查询日志,找出最耗时的查询;Percona Monitoring and Management (PMM):可视化监控MySQL性能(如QPS、TPS、慢查询占比),实时掌握数据库状态。