之前工作的公司是一家外包企业,客户基本上都购买云服务,生产MySQL数据库版本是5.6。最近入职了一家新公司,统一使用自己维护的MySQL,版本都是5.7.16。这些天花了不少时间都在做MySQL的基准测试工作,包括MySQL5.7下事务隔离级别对性能的影响。
我的测试主要采用MySQL基准测试工具sysbench(https://github.com/akopytov/sysbench)和tpcc-mysql(https://github.com/Percona-Lab/tpcc-mysql),前者测试随机读写能力;后者测试复杂事务处理能力。测试前对原配置文件做一个拷贝,然后将原配置文件的“ transaction_isolation ”修改为“ READ-COMMITTED ”,拷贝后的配置文件为“ REPEATABLE-READ ”。这两种隔离级别分别为Oracle / MS SQL Server和MySQL的默认事务隔离级别。然后分别读取两个配置文件进行测试,每个测试结束都会清除测试数据并重启MySQL,测试也是在独立的环境里进行的,尽量消除一些交叉影响。整个过程都是通过小脚本完成的(http://blog.csdn.net/sweeper_freedoman/article/details/78939721),物理机配置为双核4G的64位CentOS。
首先是sysbench测试的吞吐量 / TPS结果。
******************READ-COMMITTED隔离级别****************** SQL statistics: queries performed: read: 59540152 write: 17011472 other: 8505736 total: 85057360 transactions: 4252868 (590.66 per sec.) queries: 85057360 (11813.22 per sec.) ignored errors: 0 (0.00 per sec.) reconnects: 0 (0.00 per sec.) General statistics: total time: 7200.1684s total number of events: 4252868 Latency (ms): min: 2.24 avg: 3.38 max: 389.75 95th percentile: 4.49 sum: 14388126.96 Threads fairness: events (avg/stddev): 2126434.0000/817.00 execution time (avg/stddev): 7194.0635/0.01 ******************REPEATABLE-READ隔离级别****************** SQL statistics: queries performed: read: 59420284 write: 16977076 other: 8488562 total: 84885922 transactions: 4244256 (589.47 per sec.) queries: 84885922 (11789.42 per sec.) ignored errors: 50 (0.01 per sec.) reconnects: 0 (0.00 per sec.) General statistics: total time: 7200.1644s total number of events: 4244256 Latency (ms): min: 1.95 avg: 3.39 max: 688.12 95th percentile: 4.49 sum: 14388073.43 Threads fairness: events (avg/stddev): 2122128.0000/147.00 execution time (avg/stddev): 7194.0367/0.03
“ READ-COMMITTED ”的TPS为590.66;“ REPEATABLE-READ ”的TPS为589.47。其他结果值也基本接近。
然后是tpcc-mysql的测试结果。“ READ-COMMITTED ”为9784 TpmC;“ REPEATABLE-READ ”为10170 TpmC。“ REPEATABLE-READ ”不落下风。以下为1个小时的测试过程中,两种隔离级别的具体表现(测试过程中每60秒打印一次输出)。
个人之前一直是作为MySQL5.6的管理员。当然,现在的版本是5.7。使用最新版本的MySQL肯定是正确的选择。查阅MySQL的Release Notes和官方文档对5.7的介绍,提到对性能做了很多优化工作,测试来看,的确如此!