硬件是数据库性能的基础,需优先满足以下要求:
free -h命令监控),确保数据在内存中处理。通过修改内核参数,提升系统对MySQL的支撑能力:
/etc/sysctl.conf文件,添加或调整以下参数:# 增加TCP连接数限制
net.ipv4.tcp_max_syn_backlog = 8192
net.core.somaxconn = 8192
# 提升系统打开文件数限制(MySQL需大量文件描述符)
fs.file-max = 65535
# 减少TIME_WAIT状态连接,提升端口复用率
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
/etc/security/limits.conf,添加以下内容(针对MySQL用户):mysql soft nofile 65535
mysql hard nofile 65535
修改后重启系统或重新登录生效。编辑MySQL配置文件(通常位于/etc/mysql/mysql.conf.d/mysqld.cnf),调整以下关键参数:
innodb_buffer_pool_size:InnoDB缓冲池大小,建议设置为系统内存的50%-80%(如4GB内存设为2GB-3GB),用于缓存数据和索引,减少磁盘IO。max_connections:最大连接数,根据应用并发需求设置(如200-500),避免过多连接导致内存耗尽;可通过SHOW STATUS LIKE 'Threads_connected';监控当前连接数。innodb_log_file_size:InnoDB日志文件大小,建议设置为256MB-1GB(如512MB),提升写入性能;修改后需重启MySQL并重建日志文件。query_cache_size:查询缓存大小(仅适用于读多写少场景),建议设置为64MB-128MB;若写操作频繁,可禁用(设为0)。tmp_table_size与max_heap_table_size:临时表大小,建议设置为64MB-128MB,避免大查询使用磁盘临时表(可通过SHOW STATUS LIKE 'Created_tmp_disk_tables';监控)。slow_query_log与long_query_time:开启慢查询日志(设为1),设置慢查询阈值为2秒(long_query_time=2),用于定位性能瓶颈查询。SELECT *,只选择需要的列;JOIN代替子查询(子查询会增加临时表开销);LIMIT限制结果集大小(如SELECT * FROM users LIMIT 10;);WHERE子句中对字段使用函数或计算(如WHERE DATE(create_time) = '2025-10-01'),会导致索引失效。WHERE、JOIN、ORDER BY的列创建索引(如CREATE INDEX idx_user_name ON users(name););EXPLAIN分析查询计划(如EXPLAIN SELECT * FROM users WHERE name = '张三';),确保索引被正确使用(关注type列是否为ref或range,key列是否使用了索引)。INT代替BIGINT,VARCHAR(50)代替TEXT);TEXT、BLOB类型(除非必要),大字段会降低查询性能;SHOW STATUS查看服务器状态(如SHOW STATUS LIKE 'Innodb_buffer_pool_read%';监控缓冲池命中率);SHOW PROCESSLIST查看当前运行的查询(找出长时间运行的查询,如SHOW PROCESSLIST;);mysqltuner工具分析配置(安装:sudo apt install mysqltuner,运行:mysqltuner --user root --ask-pass,根据建议调整参数)。OPTIMIZE TABLE整理表碎片(如OPTIMIZE TABLE large_table;),减少碎片对查询性能的影响;mysqldump或第三方工具,如Percona XtraBackup)。