Percona tpcc-mysql派生分支, 增加自增列主键,取消外键,降低压测过程输出频率
C Shell Python Makefile
Latest commit 2cafa24 Dec 23, 2015 @yejr Update README.md
Permalink
Failed to load latest commit information.
schema2 20141007提交 Oct 7, 2014
scripts
src
README 20141007提交 Oct 7, 2014
README.md
create_table-autoinc-pk.sql
load.sh 20141007提交 Oct 7, 2014
run_tpcc.sh 20141010提交 Oct 10, 2014
tpcc_load_parallel.sh Create tpcc_load_parallel.sh Dec 23, 2015

README.md

tpcc-mysql - A fork of percona tpcc-mysql


基于Percona tpcc-mysql的衍生版本,增加了自增列主键,去掉外键等特性。

为什么有这个分支

tpcc-mysql是percona基于TPC-C(下面简写成TPCC)衍生出来的产品,专用于MySQL基准测试。

它生成的测试表我认为有2个问题: 1、没有自增列作为主键。如果仅作为基准测试问题不大,但和我们实际生产中的设计模式可能有一定区别,相信大多数人还是习惯使用自增列作为主键的,如果你没这个习惯,那么可以忽略本文了; 2、使用外键。个人认为MySQL对外键支持并不是太好,并且一定程度上影响并发性能,因此建议取消外键,仅保留一般的索引。

主要原因在于InnoDB引擎的特性,因为以下几点:

  • InnoDB是索引组织表,更进一步说,是聚集索引组织表;
  • 索引组织表的特点是该表数据存储顺序和索引的逻辑顺序完全一致;
  • InnoDB默认优先选择主键作为聚集索引,否则会选择第一个定义为NOT NULL的唯一索引,若也没有的话则选择InnoDB引擎内置的rowid作为聚集索引;
  • 因此最好要有显式声明一个主键,而且该主键具备顺序特性,所以选择自增列作为主键最为合适;
  • 如果没有自增列做主键,那么写入的数据有可能是在物理及逻辑上都是随机离散存储的,相对更容易导致行锁等待或者死锁的问题。

基于上面几点,才有了这个分支版本。 因为只是增加了一个没有业务用途的自增主键列,可以放心使用,正常情况下,不会影响tpcc压测结果的相对准确性。 我微调了下tpcc-mysql的源码,主要改动有下面几个地方: 1、所有表都加上自增列做主键; 2、取消外键,仅保留普通索引; 3、降低tpcc测试过程中的输出频率,避免刷屏; 4、修改了表结构初始化DDL脚本以及load.c文件;

利用该分支版本进行tpcc压力测试的结果表明,有自增列主键时,其TpmC相比没有自增列主键约提升了10%,还是比较可观的。

快速使用


1、环境初始化

1.1 创建tpcc数据库

[yejr@imysql.com]# mysqladmin -S path/mysql.sock -u user -p passwd create tpcc

1.2 初始化表结构

[yejr@imysql.com]# mysql -S path/mysql.sock -u user -p passwd -f tpcc < create_table-aidpk.sql

2、编译tpcc-mysql

2.1 进入tpcc-mysql源码目录,执行 make,编译过程无报错即可

[yejr@imysql.com]# cd path/tpcc-mysql
[yejr@imysql.com]# cd src
[yejr@imysql.com]# make

编译完成后,会在上一级目录下生成 tpcc_load、tpcc_start这2个可执行文件。

3、开始测试

3.1 利用tpcc_load初始化测试数据,用法和原先的一样

usage: tpcc_load [server] [DB] [user] [pass] [warehouse]

3.2 利用tpcc_start开始测试,用法也和原先的一样

3.3 自动化测试脚本

根据各自的测试环境,调整 run_tpcc.sh 脚本里的相应参数,运行该脚本可进行自动化测试。

备注: 每轮执行完测试后,最好能至少重启一下mysqld实例,避免热点数据缓存在内存中,影响测试结果的准确性。 此外,最好还要清除一下操作系统的os cache,用下面的方法:

[yejr@imysql.com]# echo 3 > /proc/sys/vm/drop_caches

关于tpcc-mysql的详细用法,可参考文章: 1、TPCC-MySQL使用手册:http://imysql.com/2012/08/04/tpcc-for-mysql-manual.html

最后

可以和percona官方分支版本进行对比测试,看看二者的TpmC结果相差多少。
有任何问题请联系我。

关于作者

  • 叶金荣
  • CMUG副主席
  • Oracle MySQL ACE
  • 国内最早的MySQL推广者之一
  • 2006年创办首个MySQL中文网站 http://imysql.com
  • 10余年MySQL经验,擅长MySQL性能优化、架构设计、故障排查

微信公众号:MySQL中文网、微博:@叶金荣、QQ:4700963

QQ群:125572178272675472

邮箱:imysql@gmail.com

搜索引擎中的我:谷歌Google360搜索百度搜狗