天天看點

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會重新開機執行個體,請謹慎操作。