1. 程式人生 > 實用技巧 >RDS MySQL記憶體管理

RDS MySQL記憶體管理

官方文件地址:https://help.aliyun.com/product/26090.html?spm=5176.7920929.1290474.7.2c6f4f7bACaToi

官方文件地址:https://files.cnblogs.com/files/sanduzxcvbnm/RDS_MySQL_資料庫_cn_zh-CN.pdf

記憶體的規格會決定該例項的效能。

您可以根據業務情況調整RDS MySQL例項的innodb_buffer_pool_size大小,以便提升例項效能。

背景資訊

RDS MySQL例項的記憶體主要用於以下幾個方面:

  • mysqld服務。主要是快取(InnoDB Buffer Pool)佔用記憶體,InnoDB Buffer Pool大小由引數innodb_buffer_pool_size指定。
  • RDS相關管理服務。
  • 底層作業系統。

本地SSD盤

例項規格記憶體 = mysqld服務記憶體

對於RDS MySQL本地SSD盤例項,例項規格記憶體即為mysqld服務可佔用記憶體,主要包括InnoDB Buffer Pool佔用記憶體和MySQL其他服務佔用記憶體(如會話連線佔用記憶體)。本地SSD盤例項會在物理機內通過資源隔離實現多例項部署,故RDS相關管理服務和底層作業系統佔用的記憶體沒有計算在RDS例項規格的記憶體中。

雲盤(SSD雲盤或ESSD雲盤)

例項規格記憶體 = mysqld服務記憶體 + RDS相關管理服務記憶體 + 底層作業系統記憶體

對於RDS MySQL雲盤例項,例項規格記憶體包含上述3個部分,因為雲盤例項是獨立部署於不同的ECS例項中,因此需要劃分對應的記憶體用於執行RDS相關管理服務和底層作業系統。

底層作業系統一般會佔用500~700MB記憶體,RDS相關管理服務約佔用500MB記憶體。

InnoDB Buffer Pool設定

RDS例項可以通過引數innodb_buffer_pool_size來調整InnoDB Buffer Pool的大小,當前僅支援通過公式進行修改。公式如下:

{DBInstanceClassMemory*X/Y}    

示例

{DBInstanceClassMemory*7/10}

說明

  • DBInstanceClassMemory為RDS例項規格記憶體系統變數。
  • X、Y為分子和分母。
  • 可調整範圍為:[128MB, DBInstanceClassMemory*8/10 ],即最小調整到128MB,最大調整到RDS例項規格記憶體的80%。

RDS例項預設InnoDB Buffer Pool大小如下:

  • 如果RDS雲盤例項規格記憶體<16GB,預設InnoDB Buffer Pool = (RDS例項規格記憶體 - RDS相關管理服務記憶體 - 底層作業系統記憶體)* 0.7。
  • 如果RDS雲盤例項規格記憶體 ≥ 16GB,或RDS例項為本地SSD盤,預設InnoDB Buffer Pool = RDS例項規格記憶體 * 0.7。

為了保障例項穩定性,對於1核1GB、1核2GB等小規格例項,innodb_buffer_pool_size預設設定為256MB。

InnoDB Buffer Pool大小始終為innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances的倍數,如果不為倍數關係時,會自動修改為倍數關係。例如innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances=1GB,如果將innodb_buffer_pool_size設定為1.5GB,系統會自動修改innodb_buffer_pool_size為2GB。

警告 修改 innodb_buffer_pool_size會重啟例項,請謹慎操作。