Linux MariaDB 内存控制实战指南
一 核心思路与快速估算
二 关键参数与建议范围
三 监控与评估方法
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';、SHOW VARIABLES LIKE 'max_connections';、SHOW VARIABLES LIKE 'open_files_limit';SHOW STATUS LIKE 'Threads_connected';、SHOW STATUS LIKE 'Threads_created';SHOW ENGINE INNODB STATUS\G(关注 Buffer pool hit rate、Free/Dirty 等),或查询 information_schema.INNODB_BUFFER_POOL_STATS;SHOW GLOBAL STATUS LIKE 'Created_tmp%';、SHOW GLOBAL STATUS LIKE 'Sort%';top/htop、iostat、ss -tulnp | grep mariadbmysqladmin status、SHOW PROCESSLISTUPDATE performance_schema.setup_instruments SET ENABLED='YES' WHERE NAME LIKE '%memory/%';SELECT SUBSTRING_INDEX(EVENT_NAME,'/',3) AS comp, ROUND(SUM(CURRENT_NUMBER_OF_BYTES)/1024/1024,2) AS mb FROM performance_schema.memory_summary_global_by_event_name GROUP BY comp ORDER BY mb DESC LIMIT 10;四 场景化配置示例
innodb_buffer_pool_size=24G、innodb_buffer_pool_instances=8、innodb_log_buffer_size=32M、key_buffer_size=16M、query_cache_size=0、max_connections=500、thread_cache_size=32、wait_timeout=600、tmp_table_size=64M、max_heap_table_size=64M、sort_buffer_size=256K、join_buffer_size=256K、read_buffer_size=128K、read_rnd_buffer_size=4Minnodb_buffer_pool_size=256M、key_buffer_size=8M、query_cache_size=0、max_connections=50–100、thread_cache_size=16、tmp_table_size=16M、max_heap_table_size=16M、sort_buffer_size=128K–256K、join_buffer_size=128K、read_buffer_size=128K、read_rnd_buffer_size=256Kperformance_schema=off、key_buffer_size=16M、query_cache_size=2M、tmp_table_size=1M、innodb_buffer_pool_size=1M、innodb_log_buffer_size=1M、max_connections=25、sort_buffer_size=512K、read_buffer_size=256K、read_rnd_buffer_size=512K、join_buffer_size=128K、thread_stack=196K、binlog_cache_size=0SET GLOBAL 生效,涉及缓冲池大小等重启项需编辑配置文件并重启。五 常见陷阱与优化顺序
sort_buffer_size / join_buffer_size 过大在高并发下极易导致 OOM;优先通过索引、覆盖索引、改写 SQL、分批处理来降低需求。Created_tmp_disk_tables / Created_tmp_tables 比例高时,先优化 SQL(避免大 GROUP BY/ORDER BY/UNION),再适度上调 tmp_table_size / max_heap_table_size 并启用压缩临时表(如 internal_tmp_mem_storage_engine=MEMORY 且支持时)。