Ubuntu MariaDB 内存配置建议
一 核心原则与快速建议
二 关键内存参数与作用边界
| 参数 | 作用 | 建议范围 | 要点 |
|---|---|---|---|
| innodb_buffer_pool_size | InnoDB 数据与索引缓存 | 专用库:内存的50%–75%;混布:50%–70% | 越大越好,但避免挤占系统与其他服务内存 |
| innodb_buffer_pool_instances | 缓冲池分片 | 1–16,每个实例≥1GB | 提升并发与减少锁争用,通常设为 CPU 核心数的1–2倍 |
| key_buffer_size | MyISAM 索引缓存 | 仅 MyISAM:内存的**~20%;否则8–64M** | 若基本不用 MyISAM,保持较小值即可 |
| query_cache_type / query_cache_size | 查询缓存 | 建议:OFF / 0;若启用:≤50M | 写多或高并发下收益低、争用重 |
| max_connections | 最大连接数 | 依业务与资源定 | 过高会放大 per-thread 内存开销 |
| thread_cache_size | 线程缓存 | 16–32 起步 | 降低线程创建/销毁成本 |
| table_open_cache | 表句柄缓存 | 2000–10000 | 结合 Opened_files/Uptime 调整 |
| tmp_table_size / max_heap_table_size | 内存临时表上限 | 两者取相同值,如64–256M | 超过上限会落盘,影响性能 |
| innodb_log_file_size | 重做日志文件大小 | 256M–1G | 大日志可减少检查点刷写,但崩溃恢复更慢 |
| innodb_log_buffer_size | 日志缓冲区 | 16–64M | 一般无需过大 |
| innodb_flush_log_at_trx_commit | 事务日志刷盘策略 | 1(最安全)/ 2(性能更好) | 0/2 有丢失最近秒级事务的风险 |
| read_buffer_size / read_rnd_buffer_size / sort_buffer_size / join_buffer_size | 会话级操作缓冲 | 谨慎小幅上调 | 每个连接都会分配,过高会放大总内存 |
三 不同内存规格的起步配置示例
| 总内存 | 专用 InnoDB 起步配置 | 混布或低内存起步配置 |
|---|---|---|
| 2GB | innodb_buffer_pool_size=1G;innodb_buffer_pool_instances=1;key_buffer_size=16M;query_cache_type=OFF;max_connections=150;tmp_table_size/max_heap_table_size=64M;innodb_log_file_size=256M;innodb_log_buffer_size=16M;innodb_flush_log_at_trx_commit=1 | 更保守:innodb_buffer_pool_size=512M;max_connections=100;其他同左 |
| 4GB | innodb_buffer_pool_size=2–3G;innodb_buffer_pool_instances=2–4;key_buffer_size=16M;query_cache_type=OFF;max_connections=200–300;tmp_table_size/max_heap_table_size=128M;innodb_log_file_size=256M;innodb_log_buffer_size=32M;innodb_flush_log_at_trx_commit=1 | innodb_buffer_pool_size=2G;max_connections=200;其他同左 |
| 8GB | innodb_buffer_pool_size=5–6G;innodb_buffer_pool_instances=4–8;key_buffer_size=32M;query_cache_type=OFF;max_connections=300–500;tmp_table_size/max_heap_table_size=128–256M;innodb_log_file_size=512M;innodb_log_buffer_size=32M;innodb_flush_log_at_trx_commit=1/2 | innodb_buffer_pool_size=4G;max_connections=300;其他同左 |
| 16GB | innodb_buffer_pool_size=10–12G;innodb_buffer_pool_instances=8;key_buffer_size=64M;query_cache_type=OFF;max_connections=500–800;tmp_table_size/max_heap_table_size=256M;innodb_log_file_size=1G;innodb_log_buffer_size=64M;innodb_flush_log_at_trx_commit=1/2 | innodb_buffer_pool_size=8G;max_connections=500;其他同左 |
四 系统层面与监控要点