Numa對MySQL多例項效能測試報告
目的
由於MySQL採用了執行緒模式,對於NUMA特性的支援並不好。如果單機執行多個MySQL例項,可以將MySQL繫結在不同的CPU節點上,並且採用繫結的記憶體分配策略,強制在本節點內分配記憶體,這樣既可以充分利用硬體的NUMA特性,又避免了單例項MySQL對多核CPU利用率不高的問題。
測試環境:
測試系統環境如下所示:
Summary: |
Dell R610, 1 x Xeon E5645 2.40GHz, 47.2GB / 48GB 1333MHz DDR3 |
System: |
Dell PowerEdge R610 (Dell 08GXHX) |
Processors: |
1 (of 2) x Xeon E5645 2.40GHz 5860MHz FSB (HT enabled, 6 cores, 24 threads) |
Memory: |
47.2GB / 48GB 1333MHz DDR3 == 6 x 8GB, 6 x empty |
Disk: |
sda (scsi0): 1.2TB (17%) JBOD == 1 x DELL-PERC-H700 |
Disk-Control: |
megaraid_sas0: LSI Logic / Symbios Logic MegaRAID SAS 2108 [Liberator], Package 12.10.4-0001, FW 2.100.03-1584, BIOS 3.18.00_4.09.05.00_0x0416A000, Cache 1GB, BBU |
Chipset: |
Intel 82801IB (ICH9) |
Network: |
em1 (bnx2): Broadcom NetXtreme II BCM5709 Gigabit, d4:be:d9:f5:62:50, 1000Mb/s <full-duplex> |
OS: |
CentOS 6.2 (Final), Linux 2.6.32-220.23.1.el6.x86_64 x86_64, 64-bit |
此外,Virident FlashMAX官方提供的引數如下所示:
Capacity (GB) |
1000 |
NAND Flash |
MLC |
Form Factor |
Low Profile (half height, half length) |
Read Performance |
1.3 GB/s (4KB blocks) 325,000 IOPS (4KB blocks) 1,000,000 IOPs (0.5KB blocks) |
Sustained Mixed Performance (75:25 r/w) |
850 MB/s (4 KB blocks) 280,000 IOPS (4KB blocks) |
Access Latency |
19us |
Lifetime (PB written to flash) |
10, 15 |
測試工具及條件
測試工具為percona提供的TPCC-MySQL基準測試工具,測試環境如下所示,資料大小大約為30G。並且所有例項的測試條件相同。
[warehouse]: 300 [connection]: 32 [rampup]: 1200 (sec.) [measure]: 1800 (sec.) |
測試方案
測試numa對MySQL多例項效能影響,通過對numa將MySQL繫結在不同的CPU節點上,並且採用繫結的記憶體分配策略,強制在本節點內分配記憶體。具體測試如下:
1、關閉numa(numa= interleave),MySQL單例項;開啟numa(numa=default),MySQL單例項,進行效能測試,比較測試結果。
2、numa隔離MySQL兩個例項,instance1繫結到0,instance2繫結到1;無numa隔離的MySQL兩個例項,進行效能測試,比較測試結果。
3、numa隔離MySQL四個例項,instance1、instance3繫結到0,instance2、instance4繫結到1;以及無numa隔離的MySQL四個例項,進行效能測試,比較測試結果。
測試結果
1、MySQL單例項
關閉numa(numa = interleave),與開啟numa(numa = default)的MySQL效能測試結果如下所示:
測試 |
TpmC |
關閉numa(numa = interleave) |
20570.699 TpmC |
開啟numa(numa = default) |
20341.533 TpmC |
2、MySQL兩個例項
numa隔離MySQL兩個例項,instance1繫結到0,instance2繫結到1,與無numa隔離的MySQL兩個例項的效能測試結果如下所示:
測試 |
instance1 |
instance2 |
numa隔離 |
16307.533 TpmC |
14678.600 TpmC |
無numa隔離 |
15059.134 TpmC |
15089.167 TpmC |
3、MySQL四個例項
numa隔離MySQL四個例項,instance1、instance3繫結到0,instance2、instance4繫結到1,與無numa隔離的MySQL四個例項的效能測試結果如下所示:
測試 |
instance1 |
instance2 |
instance3 |
instance4 |
numa隔離 |
10623.866 TpmC |
10325.767 TpmC |
10623.600 TpmC |
10287.800 TpmC |
無numa隔離 |
10268.100 TpmC |
10316.400 TpmC |
10323.134 TpmC |
10260.200 TpmC |
對比圖如下所示:
測試結論
經過測試,從而驗證了單機執行多個MySQL例項,將MySQL繫結在不同的CPU節點上,並且採用繫結的記憶體分配策略,強制在本節點內分配記憶體,這樣既可以充分利用硬體的NUMA特性,又避免了單例項MySQL對多核CPU利用率不高的問題。
此外,從測試結果來看,在相同測試條件下和測試壓力下,CPU:0上MySQL的效能明顯優於CPU:1上MySQL的效能。至於原因,仍然需要進一步的測試。
參考資料
1、《MySQL單機多例項方案》http://www.hellodb.net/2011/06/mysql_multi_instance.html