首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 參數調優實戰:從模板選擇到核心指標監控

     編輯:MySQL 資料庫相關知識

官方提供的配置模板選擇

模板適用場景
my-small.cnf內存 ≤64MB,MySQL 偶爾使用
my-medium.cnf內存 32-64MB 主業務,或 128MB 混合部署
my-large.cnf內存 512MB,專用數據庫服務器
my-huge.cnf內存 1-2GB,專用高負載
my-innodb-heavy-4G.cnf4GB 內存,純 InnoDB,少連接複雜查詢

使用方法:cp my-xxx.cnf /etc/my.cnf && service mysqld restart。但生產環境仍需根據實際指標微調。

動態監控兩大入口

  • SHOW VARIABLES;:查看當前生效參數
  • SHOW STATUS;:查看運行時狀態計數器

四大核心參數調優實戰判斷

1. table_cache(表緩存)


# 模板建議
table_cache = 2048
open-files-limit = 4096  # [mysqld_safe] 區段

判斷:SHOW STATUS LIKE 'open_tables'; 若 Open_tables 接近 table_cache 且 Opened_tables 持續增長 → 需調大。

2. key_buffer_size(MyISAM 索引緩存)


key_buffer_size = 32M  # 不超 30% 內存,純 InnoDB 設 8-64M 供臨時表

判斷:Key_reads / Key_read_requests 比率。< 0.01(1%)為優,> 0.1 需調大。

3. query_cache_size(查詢緩存)


query_cache_size = 64M
query_cache_type = 1  # 0=關,1=開,2=DEMAND
query_cache_limit = 1M  # 單查詢上限
query_cache_min_res_unit = 4K  # 分配最小單位

判斷:

  • Qcache_lowmem_prunes 大 → 緩存不足,調大
  • Qcache_hits 大且命中率高 → 有效,繼續調大
  • Qcache_hits 低 → 重複查詢少,關閉緩存反而更快(SQL_NO_CACHE 強制跳過)
  • Qcache_free_blocks 碎片多 → 調小 query_cache_min_res_unit

4. InnoDB 專屬核心參數


innodb_buffer_pool_size = 2G  # 關鍵,≥ 50% 內存
innodb_additional_mem_pool_size = 16M
innodb_log_file_size = 256M
innodb_log_files_in_group = 3
innodb_flush_log_at_trx_commit = 1
innodb_thread_concurrency = 16
innodb_lock_wait_timeout = 120

其他參數(innodb_file_io_threads、innodb_log_buffer_size、innodb_max_dirty_pages_pct、innodb_flush_method)按模板微調即可,核心看 buffer_pool 與 flush_log 策略。

調優閉環建議

  1. 選擇最近模板作基線
  2. 運行業務負載 1-2 天
  3. 收集 SHOW GLOBAL STATUS 關鍵指標
  4. 針對瓶頸參數單項調整,觀察效果
  5. 定期複查,配合 EXPLAIN、慢查詢分析持續優化
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved