优化 Debian 上的 MySQL(通常指 MySQL / MariaDB)可以从系统层面、MySQL 配置、Schema 与查询、监控与维护几个方面入手。下面给你一份比较实用、可落地的优化指南。
ext4 或 xfs/dev/sdb1 /var/lib/mysql ext4 defaults,noatime,nodiratime 0 2
sysctl vm.swappiness=10
写入 /etc/sysctl.conf 持久化。
ulimit -n 65535
MySQL 配置文件:
[mysqld]
open_files_limit = 65535
/var/lib/mysql 单独挂载配置文件位置(常见):
/etc/mysql/mysql.conf.d/mysqld.cnf
innodb_buffer_pool_size = 4G # 物理内存的 60%~70%
innodb_buffer_pool_instances = 4
key_buffer_size = 256M # MyISAM 用,基本可忽略
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
innodb_file_per_table = 1
说明:
trx_commit=2提高性能(略降安全性)O_DIRECT避免双缓存
max_connections = 500
thread_cache_size = 100
wait_timeout = 600
interactive_timeout = 600
query_cache_type = 0 # 8.0 已移除,不建议用
WHERE DATE(create_time) = ...
LIKE '%abc'
开启慢查询日志:
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
分析:
mysqldumpslow -s t /var/log/mysql/slow.log
EXPLAIN SELECT * FROM orders WHERE user_id = 1;
OPTIMIZE TABLE table_name;
(InnoDB 一般不必频繁)
mysqladmin statushtop, iostatapt install mytop
Debian 默认可能是 MariaDB,优化参数略有差异。
SELECT * FROM performance_schema.events_statements_summary_by_digest;
innodb_buffer_pool_size 合理如果你愿意,可以告诉我:
我可以直接帮你写一份可用的 my.cnf 配置。