innodb_buffer_pool_size用於設定InnoDB緩衝池的大小。您可以根據業務需求調整RDS MySQL執行個體的innodb_buffer_pool_size,以提升執行個體效能。
前提條件
執行個體系列如下:
RDS MySQL高可用系列
RDS MySQL基礎系列
RDS MySQL叢集系列
應用限制
RDS MySQL Serverless執行個體不支援手動修改innodb_buffer_pool_size參數,執行個體會根據規格變化自動調整InnoDB Buffer Pool的大小。
若RDS MySQL執行個體的innodb_buffer_pool_size參數設定過大,可能導致記憶體溢出(OOM)並觸發主備切換,建議按本文推薦的最大Buffer Pool值進行配置。
應用情境
在日常使用中,除了記憶體有限的情況下,建議增大該參數,以最佳化資料庫效能。
增大:在伺服器記憶體充足的情況下,增大innodb_buffer_pool_size可以有效減少磁碟I/O輸送量。如果查詢的資料能夠完全或大部分儲存在記憶體中,CPU便不需要頻繁等待磁碟I/O,從而有助於降低CPU的使用率。例如,對於頻繁執行的UPDATE類型語句,較大的緩衝池能夠減少對磁碟的依賴,減輕行鎖等待,進而提高MySQL處理資料更新的效率,尤其是在更新的記錄較多時。
減小:在記憶體資源有限,或者有其他應用對記憶體需求較高的情況下,可以減小innodb_buffer_pool_size參數值。
InnoDB Buffer Pool大小
RDS執行個體可以通過參數innodb_buffer_pool_size來調整InnoDB Buffer Pool的大小,當前僅支援通過公式進行修改。公式如下:
{DBInstanceClassMemory*X/Y}
# 樣本:{DBInstanceClassMemory*7/10}DBInstanceClassMemory為RDS執行個體規格記憶體(系統變數),X/Y表示Buffer Pool大小占執行個體記憶體的比例。可調整範圍為:[128 MB, DBInstanceClassMemory * 9 / 10],即最小調整到128 MB,最大調整到RDS執行個體規格記憶體的90%。
InnoDB Buffer Pool大小預設值
高效能本地碟執行個體
以下規格Buffer Pool大小預設值為執行個體記憶體的80%~90%,其他規格預設值為執行個體記憶體的75%(執行個體記憶體 * 3 / 4)。
規格類型系列 | 規格碼 | CPU與記憶體 | 預設值(MB)及其占執行個體記憶體比例 |
通用型 | rds.mysql.s3.large | 4核 8GB | 7372(90%) |
rds.mysql.m1.medium | 4核 16GB | 14745(90%) | |
rds.mysql.c1.large | 8核 16GB | 13107(80%) | |
rds.mysql.c1.xlarge | 8核 32GB | 27852(85%) | |
rds.mysql.c2.xlarge | 16核 64GB | 52428(80%) | |
rds.mysql.c2.xlp2 | 16核 96GB | 78643(80%) | |
獨享型 | mysql.x4.large.2 | 4核 16GB | 14745(90%) |
mysql.x8.large.2 | 4核 32GB | 29491(90%) | |
mysql.x4.xlarge.2 | 8核 32GB | 27852(85%) | |
mysql.x8.xlarge.2 | 8核 64GB | 55705(85%) | |
mysql.x4.2xlarge.2 | 16核 64GB | 52428(80%) | |
mysql.x8.2xlarge.2 | 16核 128GB | 104857(80%) |
雲端硬碟執行個體
通用型規格
Buffer Pool大小預設值為執行個體記憶體的75%(執行個體記憶體 * 3 / 4)。
獨享型規格
Buffer Pool大小預設值:
(執行個體記憶體 - 系統預留記憶體) * 3 / 4系統預留記憶體計算公式為:
min{執行個體記憶體 / 2, 2048} + max{執行個體CPU * 64, 執行個體記憶體 / 64} + (執行個體記憶體 / 64) + 285,執行個體記憶體單位取MB。
為方便您設定,下表提供了獨享型規格執行個體對應的預設Buffer Pool和推薦最大Buffer Pool。
執行個體CPU核心數 | 執行個體記憶體(MB) | Buffer Pool大小 | |
預設值(MB) | 推薦值(MB) | ||
2 | 4096 | 1024 | 1024 |
2 | 8192 | 4096 | 4096 |
2 | 16384 | 9216 | 10240 |
4 | 8192 | 4096 | 4096 |
4 | 16384 | 9216 | 10240 |
4 | 32768 | 21504 | 22528 |
8 | 16384 | 9216 | 10240 |
8 | 32768 | 21504 | 22528 |
8 | 65536 | 45056 | 48128 |
12 | 24576 | 15360 | 16384 |
12 | 49152 | 33792 | 35840 |
12 | 98304 | 69632 | 73728 |
16 | 32768 | 21504 | 22528 |
16 | 65536 | 45056 | 48128 |
16 | 131072 | 93184 | 99328 |
24 | 49152 | 32768 | 34816 |
24 | 98304 | 69632 | 73728 |
24 | 196608 | 140288 | 149504 |
32 | 65536 | 45056 | 47104 |
32 | 131072 | 93184 | 99328 |
32 | 262144 | 188416 | 200704 |
52 | 98304 | 67584 | 72704 |
52 | 196608 | 140288 | 149504 |
52 | 393216 | 283648 | 302080 |
64 | 262144 | 188416 | 200704 |
64 | 524288 | 378880 | 403456 |
102 | 786432 | 569344 | 607232 |
104 | 196608 | 138240 | 147456 |
104 | 393216 | 282624 | 302080 |
InnoDB Buffer Pool的容量大小始終為innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances的倍數:
innodb_buffer_pool_chunk_size固定為32 MB,較早期建立的執行個體可能為128 MB。當使用者佈建的
innodb_buffer_pool_size值不為倍數關係時,系統會自動向上取整到最近的整數倍值。
例如:當innodb_buffer_pool_chunk_size為1 GB且innodb_buffer_pool_instances為1時,若將innodb_buffer_pool_size設定為1.5 GB,實際會調整為2 GB。
調整單個執行個體的InnoDB Buffer Pool大小
訪問RDS執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。
在左側導覽列單擊參數設定。
找到參數innodb_buffer_pool_size,單擊右側
進行修改,然後單擊確定。單擊提交參數,在彈出的提示框中單擊確定。
說明RDS MySQL 5.6的
innodb_buffer_pool_size參數修改需要重啟,RDS MySQL5.7和8.0則不需要重啟。
使用模板調整InnoDB Buffer Pool大小
您可以建立參數模板修改innodb_buffer_pool_size,然後應用到需要修改的執行個體。如果已有模板,可以修改模板後應用到需要修改的執行個體。詳情請參見使用參數模板。

相關文檔
您也可以根據執行個體的監控資訊和慢日誌分析,分析並處理RDS MySQL記憶體使用量問題。