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,然後應用到需要修改的執行個體。如果已有模板,可以修改模板後應用到需要修改的執行個體。詳情請參見使用參數模板。
將配置值設定為 {DBInstanceClassMemory*7/10},該參數修改後需要重啟執行個體。
相關文檔
您也可以根據執行個體的監控資訊和慢日誌分析,分析並處理RDS MySQL記憶體使用量問題。