MySQL 安裝後默認配置難以支撐生產負載。本文聚焦三大核心參數:key_buffer_size、query_cache_size、table_cache,通過狀態值指導調優。
my-small.cnf:< 64MB 內存my-medium.cnf:64-128MB(最通用)my-large.cnf:512MB+my-huge.cnf:1-2GB+拷貝至 /etc/my.cnf 修改,mysqladmin variables 查看生效值。
索引塊緩存大小,直接影響索引讀取速度。
Key_read_requests / Key_reads 比值 ≥ 1:100,理想 1:1000+實例(運行 20 天):
key_buffer_size = 128M
Key_read_requests = 650,759,289
Key_reads = 79,112
比值 ≈ 1:8000 極其健康
估算法:所有表索引大小之和(示例約 125MB),隨數據增長調整。
SELECT 結果緩存,命中時零解析零執行。
Qcache_lowmem_prunes(緩存不足剔除次數)、Qcache_hits(命中數)、Qcache_free_blocks(碎片塊數)Qcache_lowmem_prunes 大 → 增加緩存Qcache_hits 小 → 查詢重複率低,考慮關閉緩存Qcache_free_blocks 大 → 碎片多,需 FLUSH QUERY CACHE實例配置:
query_cache_size = 32M
query_cache_type = 1
狀態:Qcache_hits=79M, Lowmem_prunes=617K, Free_blocks=5328
建議:內存允許下調大至 64M+
表描述符緩存,減少打開/關閉表開銷。
Open_tables vs Opened_tablesOpen_tables == table_cache 且 Opened_tables 持續增長 → 擴大實例:table_cache=256,運行 20 天 Opened_tables=9046,增長極慢,無需調大。
後續將講解 sort_buffer_size、read_buffer_size、thread_cache_size、innodb_buffer_pool_size 等進階參數調優。