MySQL服務端innodb_buffer_pool_size配置引數

东北小狐狸發表於2024-09-02

innodb_buffer_pool_size是什麼?

innodb_buffer_pool是 InnoDB 緩衝池,是一個記憶體區域儲存快取的 InnoDB 資料為表、索引和其他輔助緩衝區。innodb_buffer_pool_size 是這個緩衝池的大小,預設128M(即134217728 bytes)。

innodb_buffer_pool_size有什麼用?

如果不設定innodb_buffer_pool_size,在生產環境的sql執行效率將大大下降,原因是快取的空間變小,能快取的資料量有限,快取的命中率大打折扣,會導致反覆去磁碟上讀資料,眾所周知磁碟的速度遠遠低於記憶體的執行效率。

innodb_buffer_pool_size的值配置有什麼要求?

innodb_buffer_pool_size的值必須是(innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances)的整數倍,即可以相等或更大。

-- 顯示當前使用的innodb緩衝池大小 及 緩衝池例項數與主幹大小
SELECT @@innodb_buffer_pool_size as pool_size,
@@innodb_buffer_pool_instances as pool_instances,
@@innodb_buffer_pool_chunk_size as chunk_size;

innodb_buffer_pool_size設定方式

兩種設定方式,區別在於MySQL的執行狀態,靜態設定需要重啟MySQL,動態設定在MySQL執行期動態調整。

靜態設定

  • 修改my.cnf,在[mysqld]作用域新增 innodb_buffer_pool_size=計算值
  • 重啟mysql。

動態設定

  • 執行SET GLOBAL innodb_buffer_pool_size=計算值; 設定緩衝池大小。
  • 執行SHOW STATUS WHERE Variable_name='InnoDB_buffer_pool_resize_status'; 查詢緩衝池大小改變狀態,出現 Completed resizing buffer pool at 時間戳 即完成。
  • 執行SELECT @@innodb_buffer_pool_size; 查詢當前緩衝池大小。

相關文章