http://blog.chinaunix.net/uid-26896862-id-3345441.html
目的
根據現有硬件環境下,測試MySQL單實例下,在數據量小於innodb_buffer_pool_size大小的情況下,innodb_buffer_pool_instances的值對MySQL數據庫的性能影響。
實驗測試環境
1、實驗測試硬件環境
Summary: Dell R620, 1 x Xeon E5-2630 0 2.30GHz, 63GB / 64GB 1600MHz DDR3 System: Dell PowerEdge R620 (Dell 036FVD) Processors: 1 (of 2) x Xeon E5-2630 0 2.30GHz 7200MHz FSB (HT enabled, 6 cores, 24 threads) Memory: 63GB / 64GB 1600MHz DDR3 == 8 x 8GB, 16 x empty |
2、實驗測試軟件環境
實驗測試的軟件環境主要包括,操作系統、MySQL數據庫以及測試工具,具體內容如下:
操作系統:
CentOS 6.2 (Final), Linux 2.6.32-220.23.1.el6.x86_64 x86_64, 64-bit
MySQL版本:Percona Server 5.5.20
TPC-C測試工具:tpcc-mysql
其中TPC-C測試工具的安裝和使用說明文檔參照相關內容。
測試方案
實驗方案為單機單實例,探索MySQL在數據量小於參數innodb_buffer_pool_size的值時,innodb_buffer_pool_instances參數對MySQL性能的影響。主要測試方案如下:
單機單實例主要測試隨着innodb_buffer_pool_instances的變化,其他參數不變的情況下,MySQL性能的影響。innodb_buffer_pool_size的大小為55G,約占內存的86%。數據量為200warehouse,數據大小大約為20G。具體如下:
測試 |
innodb_buffer_pool_instances的值 |
1 |
1 |
2 |
2 |
3 |
4 |
4 |
8 |
測試的參數具體如下所示:
Parameters |
Value |
[warehouse] |
200 |
[connection] |
16 |
[rampup] |
3600 (sec.) |
[measure] |
1800 (sec.) |
測試
測試結果如下所示:
Innodb_buffer_pool_size大小(G) |
200W吞吐量(tpmc) |
1 |
18337.033 |
2 |
18589.400 |
4 |
18042.867 |
8 |
17935.199 |
通過以上測試結果可知,在測試數據為200Warehouse時,數據大小大約占innodb_buffer_pool_size的1/3。此時,innodb_buffer_pool_instances為2時,MySQL的性能相對較高,而隨着innodb_buffer_pool_instances的增大,MySQL的性能反而有所降低。但總體來看,對數據庫的性能影響不大。
結論
innodb_buffer_pool_instances的值主要用於將innodb buffer pool進行划分,通過划分innodb buffer pool為多個實例,可以提高並發能力,並且減少了不同線程讀寫造成的緩沖頁。每一頁從其中一個buffer pool中使用hash函數隨機的讀取和寫入。每個buffer pool管理和維護各自的信息,包括free lists、flush lists、LRUs等。
從以上測試可知,隨着innodb_buffer_pool_instances的增加,MySQL的性能在划分的每個innodb buffer 的大小與測試的數據大小基本一致時,MySQL的性能最優。然而從測試結果來看,innodb_buffer_pool_instances對MySQL的性能並沒有較大的提高。因此,對該參數的設置,仍然需要進一步的測試,需要謹慎設置。
參考:
1、MySQL 5.5 Reference Manual:
http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar_innodb_buffer_pool_instances