本文转载自:http://blog.chinaunix.net/uid-26896862-id-3278913.html
分类: Mysql/postgreSQL
目的
由于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 |
以上测试系统可知,物理机器配置为两个物理CPU,每个CPU上有6核心,开启超线程状态下,显示为24 CPU。SSD的读写性能可以参照:《Virident FlashMAX测试》。
测试工具及条件
测试工具为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
注:近期参加MySQL运维学习,老师推荐该文章作为学习和技术提高的扩展阅读,先记录到自己的博客中,随后慢慢消化、学习、提高。本文与MySQL数据库 “性能优化”主题有关。