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

MySQL 記憶體架構深度解析(下):全域共享記憶體七大核心組件與監控指標

     編輯:MySQL 資料庫相關知識

全域共享記憶體總覽

Instance 級共享,隨啟動分配,不隨連線數增長。核心七大組件:

組件控制參數核心職責關鍵監控指標
查詢緩存query_cache_size, query_cache_type緩存 SELECT 結果集,完全相同查詢秒回Qcache_hits / (Qcache_hits + Qcache_inserts) 命中率
線程緩存thread_cache_size緩存空閒線程,避免頻繁創建銷毀(Connections - Threads_created) / Connections 命中率
表緩存table_open_cache (5.1.3+)緩存表檔案句柄,減少 open/close 系統調用Opened_tables / Uptime 開啟頻率
表定義緩存table_definition_cache (5.1.3+)緩存 .frm 定義資訊,加速 DDL/查詢解析大表數場景必調大(預設 256,上限 524288)
Binlog 緩衝binlog_cache_size, max_binlog_cache_size事務 Binlog 先寫記憶體,滿足 sync_binlog 條件再落盤單事務超大觸發 Multi-statement transaction required more than 'max_binlog_cache_size' bytes
MyISAM 索引緩存key_buffer_size緩存 .MYI 索引塊,MyISAM 效能命門Key_reads / Key_read_requests 未命中率
InnoDB Buffer Poolinnodb_buffer_pool_size緩存數據+索引頁,**InnoDB 效能核心**(Innodb_buffer_pool_read_requests - Innodb_buffer_pool_reads) / Innodb_buffer_pool_read_requests 命中率 > 99%

InnoDB 專屬共享記憶體

Redo Log Buffer

  • 參數:innodb_log_buffer_size (預設 16MB,建議 64-256MB)
  • 寫入策略 innodb_flush_log_at_trx_commit:
    1. 0:每秒刷檔 + 同步,**最高效能,掉電丟 1 秒**
    2. 1(預設):**每次提交刷檔 + 同步,ACID 完全保障**
    3. 2:每次提交刷檔,**不同步**,每秒同步一次,折中
  • ⚠️ OS/檔案系統/磁碟控制器快取可能導致「以為同步了其實沒有」

Additional Memory Pool

  • 參數:innodb_additional_mem_pool_size (5.6.3 後已廢棄,併入 Buffer Pool)
  • 存放資料字典、內部結構,不足自動向 OS 申請並記警告

配置建議(以 32GB 記憶體專用 DB 為例)

# 全域共享
innodb_buffer_pool_size = 22G      # 70% 物理記憶體
key_buffer_size = 256M             # 僅 MyISAM 系統表
query_cache_size = 0               # 5.7+ 建議關閉,鎖爭用嚴重
query_cache_type = 0
thread_cache_size = 100
table_open_cache = 4000
table_definition_cache = 4000
binlog_cache_size = 4M
max_binlog_cache_size = 1G
innodb_log_buffer_size = 256M
innodb_flush_log_at_trx_commit = 1

# 線程專用(保守)
sort_buffer_size = 2M
join_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 4M
tmp_table_size = 64M
max_heap_table_size = 64M

# 總量檢查:22G + 4000*(句柄/定義) + 100*(線程) + 連線數*16M < 32G

監控儀表板必備圖表

  • Buffer Pool 命中率趨勢(目標 > 99%)
  • Query Cache 命中率/碎片率(若啟用)
  • Table Open Cache 溢出率 (Opened_tables 斜率)
  • Thread Cache 命中率(> 90%)
  • Key Buffer 未命中率(MyISAM 表場景)
  • Binlog Cache 溢出次數
  • Redo Log 寫入延遲(innodb_log_write_requests vs 物理寫入)

避坑總結

  1. Query Cache 在高併發寫入場景**嚴重鎖爭用**,5.7+ 建議關閉
  2. table_open_cache 過大 → 文件描述符耗盡 (open_files_limit 需同步調大)
  3. Buffer Pool 過大 → OS Swap,反而拖垮效能,**預留 20-30% 給 OS/FS Cache**
  4. innodb_flush_log_at_trx_commit=1 是金融級預設,效能不足上電池備援 RAID 卡 (BBU/FBWC),而非降級為 0/2
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved