Mysql
對於具有 6gb 緩衝池的中級 AWS RDS 伺服器,innodb_buffer_pool_instances 的最佳設置是什麼?
我們有一個 MySQL 5.7 AWS RDS 實例在 db.m4.large 實例上執行。該實例類型的基本資源是:
- 7.5GB 記憶體
- 2個虛擬CPU
RDS 預設為將 75% 的 RAM 分配給 innodb_buffer_pool_size 的計算。
{DBInstanceClassMemory*3/4}
這最終是一個 6GB 的分配:
mysql> SELECT @@innodb_buffer_pool_size/1024/1024/1024; +------------------------------------------+ | @@innodb_buffer_pool_size/1024/1024/1024 | +------------------------------------------+ | 6.000000000000 | +------------------------------------------+
在 MySQL 5.7 中,如果您不設置緩衝池實例的數量,那麼MySQL 現在預設為 8 個池。但是MySQL 5.7 手冊在討論緩衝池實例時指出了這一點:
您指定的總大小在所有緩衝池中分配。為了獲得最佳效率,請指定 innodb_buffer_pool_instances 和 innodb_buffer_pool_size 的組合,以便每個緩衝池實例至少為 1GB。
出於這個原因,我計劃將 innodb_buffer_pool_instances 減少到 <= 6。
以下是我的問題:
- CPU 的數量和 buffer_pool_instances 設置之間是否存在某種關聯?
- 在這種情況下,使用 4,5 或 6 個 buffer_pool_instances 會更好嗎?如果是這樣,該建議背後的原因是什麼?我的簡單反應是將設置更改為 6 個緩衝池實例以滿足“至少 1GB”的建議,但我很想听聽任何進一步研究過此設置或對此設置進行基準測試的人的意見。 RDS 與否。
簡短的回答:沒問題。
長答案:
“實例”功能是新的(從 5.5.4 開始),它的存在是為了在系統以峰值負載執行時加速某些事情。但即便如此,它對性能的幫助也不會超過幾個百分點。對於負載較輕的伺服器,改進可能無法衡量。
“8”呢?我還沒有聽說有人在每個實例小於 1GB 時遇到麻煩。我懷疑讓每個實例至少有 1GB 是“建議”,而不是“硬性規定”。事實上,看了幾十台伺服器,我發現其中幾乎有一半違反了這一點。我看到一台機器有 10 個實例,只有 2GB 的 buffer_pool。
我相信 RDS 會提供合理的設置。如果他們的設置不好,他們將對所有客戶都不利。想像一下 RDS 會有多少麻煩!