CentOS下SQLAdmin性能提升方法
编辑/etc/sysctl.conf
文件,调整以下关键参数以优化网络连接和I/O性能:
net.core.somaxconn = 65535
:增加最大连接队列长度,避免高并发时连接被拒绝;net.core.netdev_max_backlog = 65535
:提升网络设备接收队列容量,减少丢包;net.ipv4.tcp_max_syn_backlog = 65535
:增加SYN连接队列大小,应对大量并发连接请求;net.ipv4.tcp_fin_timeout = 10
:缩短TCP连接关闭后的TIME_WAIT状态时长(默认60秒),释放资源;net.ipv4.tcp_tw_reuse = 1
:允许复用TIME_WAIT状态的连接,提高连接利用率;net.core.wmem_default = 87380
/net.core.wmem_max = 16777216
:调整TCP发送缓冲区大小,优化网络吞吐量;net.core.rmem_default = 87380
/net.core.rmem_max = 16777216
:调整TCP接收缓冲区大小,提升数据接收效率。sysctl -p
使配置生效。编辑/etc/security/limits.conf
文件,增加文件描述符限制(避免数据库因文件打开过多而崩溃):
* soft nofile 65536
:普通用户软限制(临时生效);* hard nofile 65536
:普通用户硬限制(永久生效)。编辑MySQL配置文件(/etc/my.cnf
或/etc/mysql/my.cnf
),调整以下核心参数:
innodb_buffer_pool_size = 系统总内存×50%-80%
:InnoDB缓冲池是MySQL最重要的内存结构,用于缓存数据和索引,合理设置可减少磁盘I/O(如8GB内存服务器可设置为4-6GB)。innodb_log_file_size = 256M-2G
:日志文件越大,redo log写入频率越低,提升写入性能(建议设置为缓冲池大小的25%-50%);innodb_log_buffer_size = 128M
:增大redo log缓冲区,减少磁盘写入次数。innodb_io_capacity = 200-2000
:根据SSD性能设置(SATA SSD设为200-500,NVMe SSD设为1000-2000),表示InnoDB后台任务的I/O处理能力;innodb_io_capacity_max = 2000-20000
:I/O处理能力上限,配合innodb_io_capacity
使用。max_connections = 200-500
:根据应用并发需求调整(避免设置过高导致内存耗尽);back_log = 1024
:增大连接请求队列长度,应对突发高并发;open_files_limit = 65536
:增加数据库能打开的文件数,避免表文件无法打开。innodb_flush_log_at_trx_commit = 2
:牺牲部分数据安全性(宕机可能丢失1秒数据)换取更高写入性能(适用于对数据一致性要求不高的场景);vm.swappiness = 10-100
(/etc/sysctl.conf
):降低交换分区使用率(设为10表示系统仅在内存不足10%时使用swap),优先使用内存。SELECT *
:只查询需要的列,减少数据传输量;JOIN
操作:优化表关联逻辑,避免多表深度关联;LIMIT
分页:如SELECT * FROM orders LIMIT 10 OFFSET 20
,避免一次性返回大量数据;EXPLAIN
命令查看查询执行路径,识别全表扫描、临时表等瓶颈。WHERE
条件、JOIN
字段、ORDER BY
字段创建索引(如CREATE INDEX idx_status_created ON orders(status, created_at)
);SELECT user_id, created_at FROM orders WHERE status = 'processing'
,索引(status, user_id, created_at)
可避免回表);OPTIMIZE TABLE
或ALTER TABLE table_name ENGINE=InnoDB
重建碎片化索引,提升查询效率。OPTIMIZE TABLE
命令(如每周一次),整理表碎片、释放未使用空间(适用于频繁更新的表);ANALYZE TABLE
命令更新表统计信息,帮助优化器生成更优的执行计划(如每天凌晨执行);MySQLTuner
(脚本分析)、Percona Toolkit
(高级诊断)、Prometheus+Grafana
(可视化监控)监控数据库性能,识别慢查询、高负载等问题;slow_query_log = 1
,long_query_time = 1
),记录执行时间超过1秒的查询,针对性优化;top
、htop
、iostat
等命令监控系统资源(CPU、内存、磁盘I/O)使用情况,及时发现瓶颈。NetworkManager
(使用传统网络服务)、SELinux
(若不需要安全增强),减少系统资源占用。