Mysql
關於緩衝池實例的大小和數量是否有經驗法則?
我知道共識似乎是大約 75% 的 ram 應該專用於緩衝池。但是,我對緩衝池實例的最佳數量更感興趣。確定設置時需要考慮哪些事項?
例如,假設我有一個 75GB 的緩衝池。我是否應該只分配 75 個緩衝池實例,每個實例 1GB?15 個,每個 5GB?或者,10 個,每個 7.5GB?
我是否應該從單個緩衝池開始並根據我是否看到鎖定來增加?
最大實例數應該基於多少 - 可用核心?
謝謝 - 非常感謝您的回复。
緩衝池實例
我通常使用的經驗法則是基於Linux環境中的一個特殊程序
numactl --hardware
當我執行它時,我得到以下輸出
sh-4.1# numactl --hardware available: 4 nodes (0-3) node 0 cpus: 0 1 2 3 node 0 size: 49151 MB node 0 free: 241 MB node 1 cpus: 4 5 6 7 node 1 size: 32768 MB node 1 free: 39 MB node 2 cpus: 8 9 10 11 node 2 size: 49152 MB node 2 free: 49 MB node 3 cpus: 12 13 14 15 node 3 size: 32752 MB node 3 free: 32 MB node distances: node 0 1 2 3 0: 10 16 16 16 1: 16 10 16 16 2: 16 16 10 16 3: 16 16 16 10
這很快告訴我我的數據庫伺服器上有多少 CPU 和核心。
一般來說,我將innodb_buffer_pool_instances設置為物理 CPU 的數量或核心的數量。特別是,我將innodb_buffer_pool_instances設置為 4 或 16。
緩衝池大小
如果您使 InnoDB 緩衝池大於已安裝 RAM 的 50%,則 mysqld 會導致作業系統開始交換……糟糕!!!!如果你需要一個那麼大的緩衝池,那麼調整innodb_buffer_pool_instances就變得更加關鍵。
結語
在第一次引入innodb_buffer_pool_instances後,我立即進行了實驗。我有一個客戶端,它有 192GB 數據庫伺服器,雙六核和 162GB 緩衝池。我只是將其設置為 2,一切正常。請參閱我在 2011 年 2 月 12 日發布的舊文章:如何調整 MySQL 以應對繁重的 InnoDB 工作負載?
試一試 !!!