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
),及时发现并解决性能问题(如死锁、连接超时)。