CentOS下SQLAdmin性能调优指南
修改/etc/sysctl.conf文件,优化网络连接和文件描述符限制,提升系统并发处理能力:
fs.file-max = 65536:提高系统最大文件句柄数,避免因文件描述符耗尽导致连接失败;vm.swappiness = 10:降低交换分区使用率(数值越小,越优先使用物理内存),提高内存利用率;net.core.somaxconn = 65535:增加TCP监听端口的最大连接队列长度,避免高并发时连接被拒绝;net.ipv4.tcp_max_syn_backlog = 65535:加快SYN包的回收速度,缓解SYN Flood攻击或高并发连接的压力;net.ipv4.tcp_fin_timeout = 10:缩短TCP连接关闭后的等待时间,释放资源;net.ipv4.tcp_tw_reuse = 1:允许复用处于TIME_WAIT状态的连接,提升TCP连接效率。sysctl -p使配置生效。编辑/etc/security/limits.conf文件,增加用户进程的文件描述符限制,避免因限制过低导致无法处理大量并发请求:
* soft nofile 65536
* hard nofile 65536
其中*表示对所有用户生效,soft为软限制(当前最大值),hard为硬限制(绝对最大值)。
编辑MySQL配置文件(/etc/my.cnf或/etc/mysql/my.cnf),调整以下关键参数以匹配服务器硬件资源:
innodb_buffer_pool_size = 系统总内存×50%-80%(如16GB内存可设置为8-12GB),用于缓存数据和索引,减少磁盘I/O;innodb_log_file_size = 256M(建议设置为1-2GB,根据写入负载调整)、innodb_log_buffer_size = 128M,增大日志文件大小可减少日志刷盘次数,提高写入性能;innodb_io_capacity = 200(机械硬盘)、innodb_io_capacity_max = 2000(SSD),根据磁盘类型调整,优化脏页刷新和预读操作;innodb_flush_log_at_trx_commit = 2(平衡性能与数据安全性,若对数据一致性要求极高则设为1),减少日志刷盘频率;innodb_log_files_in_group = 3(默认2个,增加数量可提高日志持久性)。EXPLAIN命令分析查询执行计划,确认是否使用了索引(type列为ref或range为佳);SELECT *,只查询需要的列(如SELECT id, name FROM users);ON a.user_id = b.id时,为a.user_id和b.id创建索引);LIMIT offset, size时,避免大偏移量(如LIMIT 10000, 10),可通过子查询优化(如SELECT * FROM table WHERE id > last_id ORDER BY id LIMIT 10)。CREATE INDEX idx_status ON orders(status));CREATE INDEX idx_covering ON orders(user_id, created_at, status)),避免回表查询;CREATE INDEX idx_active_orders ON orders(id) WHERE status = 'active'),减少索引大小,提高查询效率;CREATE INDEX idx_lower_email ON users(LOWER(email))),优化大小写不敏感的查询。ANALYZE TABLE table_name更新表的统计信息,帮助优化器选择更优的执行计划;执行OPTIMIZE TABLE table_name整理表碎片,释放未使用的空间(适用于频繁更新的表);ALTER TABLE table_name ENGINE=InnoDB或OPTIMIZE TABLE重建,提高索引查询效率。mysqltuner(脚本分析)生成性能报告,查看缓冲池命中率、查询缓存效率等指标;使用MySQL Performance Tuning Primer Script(脚本)提供优化建议;Percona Toolkit(如pt-query-digest分析慢查询日志)、Prometheus + Grafana(可视化监控服务器和数据库性能指标,如CPU、内存、磁盘I/O、查询响应时间);/var/log/mysqld.log),及时发现并解决性能问题(如死锁、连接超时)。