TPC-MySQL测试的安装、使用与结果分析

一、TPC、tpc-c与tpc-mysql

TPC:全称Transaction Processing Performance Council,是一家非盈利组织,该组织制定各种商业应用的基准测试规范,任意厂商或个人,都可以按照其规范来开发自己的应用程序。

tpc-c:由TPC推出的一套基准测试程序,主要用于联机事务类应用的测试,最后的c仅是序号,a\b\d\R\W都废弃了。Tpc-c没有废弃,是套基准,不管是有了新硬件,还是软件出了新版本,为显示新产品的优势,需要拿出些数值做对比,tpcc就是数值之一,各大厂商都着力在吹。tpc-c针对连接事务类应利用和决策支持类应用(数据仓库),另有一套标准,叫tpc-h。
tpcc-msyql:有Percona基于TPCC规范开发的一套MySQL基准测试程序。

tpcc-mysql的下载地址为:
https://code.launchpad.net/~percona-dev/perconatools/tpcc-mysql


二、tpcc-mysql软件的编译安装

该软件的下载和安装过程如下:

# yum install bzr -y --安装bzr工具包

Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
 * base: mirror.bit.edu.cn
 * extras: mirror.bit.edu.cn
 * updates: mirror.bit.edu.cn
base                                                     | 3.7 kB     00:00     
extras                                                   | 3.4 kB     00:00     
updates                                                  | 3.4 kB     00:00     
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package bzr.x86_64 0:2.1.1-2.el6 will be installed
--> Finished Dependency Resolution


Dependencies Resolved


================================================================================
 Package        Arch              Version                 Repository       Size
================================================================================
Installing:
 bzr            x86_64            2.1.1-2.el6             base            5.3 M


Transaction Summary
================================================================================
Install       1 Package(s)


Total download size: 5.3 M
Installed size: 23 M
Downloading Packages:
bzr-2.1.1-2.el6.x86_64.rpm                               | 5.3 MB     00:01     
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : bzr-2.1.1-2.el6.x86_64                                       1/1 
  Verifying  : bzr-2.1.1-2.el6.x86_64                                       1/1 


Installed:
  bzr.x86_64 0:2.1.1-2.el6                                                      


Complete!

# cd /data/setup
# bzr branch lp:~percona-dev/perconatools/tpcc-mysql
You have not informed bzr of your Launchpad ID, and you must do this to
write to Launchpad or access private data.  See "bzr help launchpad-login".

Branched 48 revision(s).  


编译安装tpcc-mysql,步骤如下:
# export PATH=/usr/local/mysql/bin:$PATH
# cd tpcc-mysql/src

# make

cc -w -O2 -g -I. `mysql_config --include`  -c load.c
cc -w -O2 -g -I. `mysql_config --include`  -c support.c
cc load.o support.o `mysql_config --libs_r` -lrt -o ../tpcc_load
cc -w -O2 -g -I. `mysql_config --include`  -c main.c
cc -w -O2 -g -I. `mysql_config --include`  -c spt_proc.c
cc -w -O2 -g -I. `mysql_config --include`  -c driver.c
cc -w -O2 -g -I. `mysql_config --include`  -c sequence.c
cc -w -O2 -g -I. `mysql_config --include`  -c rthist.c
cc -w -O2 -g -I. `mysql_config --include`  -c neword.c
cc -w -O2 -g -I. `mysql_config --include`  -c payment.c
cc -w -O2 -g -I. `mysql_config --include`  -c ordstat.c
cc -w -O2 -g -I. `mysql_config --include`  -c delivery.c
cc -w -O2 -g -I. `mysql_config --include`  -c slev.c
cc main.o spt_proc.o driver.o support.o sequence.o rthist.o neword.o payment.o ordstat.o delivery.o slev.o `mysql_config --libs_r` -lrt -o ../tpcc_start

如果编译过程没有出现错误的话,就算安装好了,tpcc-mysql目录下会生成两个可执行文件;
tpcc_load:用于初始化数据
tpcc_start:用于执行基准测试
在测试时,需要先执行(且只执行一次)tpcc_load命令,然后在执行tpcc_start,但在执行前要创建需要的表和索引。

三、创建数据库预订数据
创建测试数据库并导入预订脚本:
# mysqladmin -u root -p  create  tpcc100                   //创建所需的数据库
mysql$   mysql  -u root -p  tpcc < create_table.sql    //导入表结构                       
mysql$   mysql  -u root -p  tpcc < add_fkey_idx.sql    //创建表索引及FK等
[root@racdb2 tpcc-mysql]# ./tpcc_load help
 usage: tpcc_load [server] [DB] [user] [pass] [warehouse]
      OR
        tpcc_load [server] [DB] [user] [pass] [warehouse] [part] [min_wh] [max_wh]
           * [part]: 1=ITEMS 2=WAREHOUSE 3=CUSTOMER 4=ORDERS
例如:创建100个数据仓库并填充数据     
[root@racdb2 tpcc-mysql]# ./tpcc_load  localhost  tpcc100  root  'rootpassword'  100


四、增加参数,执行tpcc_load初始化数据

注意为了保证下面两个脚本能够执行成功,建议在.bash_profile文件中增加如下参数:
# parameters for tpcc-mysql
export MYSQL_HOME=/usr/local/mysql
export C_INCLUDE_PATH=$MYSQL_HOME/include --避免找不到MySQL的头文件的错误
export PATH=$MYSQL_HOME/bin:$PATH --避免找不到mysql_config程序的错误
export LD_LIBRARY_PATH=$MYSQL_HOME/lib:$LD_LIBRARY_PATH --避免找不到mysql库的错误


上述参数生效后,根据语法,执行tpcc_load初始化数据的命令:
$ cd /data/setup/tpcc-mysql/
$ ./tpcc_load 172.32.1.203 tpcc root "123456" 10
输出结果如下:
*************************************
*** ###easy### TPC-C Data Loader  ***
*************************************
<Parameters>
     [server]: 172.32.1.203
     [port]: 3306
     [DBname]: tpcc
       [user]: root
       [pass]: 123456
  [warehouse]: 10
TPCC Data Load Started...
Loading Item 
.................................................. 5000
..................................................
Loading Orders for D=10, W= 10
.......... 1000
.......... 2000
.......... 3000
Orders Done.


...DATA LOADING COMPLETED SUCCESSFULLY.


返回结果需要运行一段时间,一次有仓库、商品、订单等,具体信息可以不用关注,最后操作完成后,会提示数据加载完成。

详细信息参见:http://blog.csdn.net/yumushui/article/details/37762517



五、执行tpcc_start执行基准测试

初始化数据完成后,就可以使用tpcc_start进行基准测试,该命令行工具支持的参数如下:
Usage:tpcc_start -h server_host -P port -d database_name -u mysql_user -p mysql_password -w warehouses -c connections -r warmup_time -l running_time -i report_interval -f report_file -t trx_file
前面是与mysql连接的参数,后面参数的意义如下:
-r warmup_time:指定预热时间,以秒为单位,默认是10秒,主要目的是为了将数据加载到内存;
-l running_time:指定测试执行时间,以秒为单位,默认是20秒;
-i report_interval:指定生产报告的时间间隔;
-f report_file:将测试中各项操作的记录输出到指定文件内保存;
-t trx_file:输出更详细的操作信息到指定文件内保存;


$ /data/setup/tpcc-mysql/tpcc_start -h 172.32.1.203 -d tpcc -u root -p "123456" -w 10 -c 10 -r 100 -l 300 -f /home/mysql/tpcc_mysql.log -t /home/mysql/tpcc_mysql.rtx
***************************************
*** ###easy### TPC-C Load Generator ***
***************************************
option h with value '172.32.1.203'
option d with value 'tpcc'
option u with value 'root'
option p with value '123456'
option w with value '10'
option c with value '10'
option r with value '100'
option l with value '300'
option f with value '/home/mysql/tpcc_mysql.log'
option t with value '/home/mysql/tpcc_mysql.rtx'
<Parameters>
     [server]: 172.32.1.203
     [port]: 3306
     [DBname]: tpcc
       [user]: root
       [pass]: 123456
  [warehouse]: 10
 [connection]: 10
     [rampup]: 100 (sec.)
    [measure]: 300 (sec.)


RAMP-UP TIME.(100 sec.)


返回信息中的内容比较有意义,首先是执行命令时指定的参数信息,格式清晰。接下来需要等一会,指定的预热及测试的时间,只是得7分钟。测试返回的结果是:
10, 2948(20):2.161|302.746, 2950(4):0.666|186.816, 294(0):0.365|21.915, 296(0):8.277|291.135, 295(1):10.260|41.107
  20, 2663(18):2.423|40.398, 2664(5):0.649|24.596, 266(0):0.276|0.529, 265(0):10.543|43.207, 266(6):19.999|56.884
  30, 2190(13):2.282|89.741, 2187(4):0.627|61.344, 219(0):0.316|0.473, 219(0):10.018|44.254, 219(0):8.537|13.819
这类信息,每10秒产生一条输出,每个翻译结果以逗号分隔后,共分为6项,一次为操作时间(秒)、创建订单、订单交付、查询订单、发货、查询库存。
第一项是定义任务执行的时间,按照每10秒为一个区间进行输出。后5项格式一样分属5个不同的业务操作,每一项都是4个属性值,即该区间内成功执行的事务数、出现延迟的事务数、90%事务的响应时间、事务的最大响应时间。
以一条具体的例子做详细说明:
10, 2948(20):2.161|302.746, 2950(4):0.666|186.816, 294(0):0.365|21.915, 296(0):8.277|291.135, 295(1):10.260|41.107
这条记录表示,在第一个10秒区间内:
创建订单。共操作2984次,失败20次,90%的事务平均操作时间2.161秒,最大操作时间为302.746秒。
订单支付。共操作2950次,失败4次,90%的事务平均操作时间0.666秒,最大操作时间为186.816秒。
查询订单。共操作294次,失败0次,90%的事务平均操作时间0.365秒,最大操作时间为21.915秒。
发货。共操作296次,失败0次,90%的事务平均操作时间8.277秒,最大操作时间为291.135秒。
查询库存。共操作295次,失败1次,90%的事务平均操作时间10.260秒,最大操作时间为41.107秒。

输出记录中,一条条分析不够形象,可以讲数字输入到Excel中,转换成图形,就可以比较直观了。

接下来的信息,是汇总各线程操作的各项事务的数据量,内容如下:
<Raw Results>
  [0] sc:83441  lt:382  rt:0  fl:0 
  [1] sc:83638  lt:174  rt:0  fl:0 
  [2] sc:8372  lt:10  rt:0  fl:0 
  [3] sc:8370  lt:12  rt:0  fl:0 
  [4] sc:8325  lt:57  rt:0  fl:0 
 in 300 sec.


在反映数据量时,使用了若干简写指标,实际代表的意义如下:
sc:即seccess,操作成功的数量。
lt:即late,指操作出现延迟的数量。
rt:即retry,指操作重试的数量。
fl:即failure,指操作失败的数量。


再接下来输出的是不同类型的业务执行的事务数占比情况:
 [transaction percentage]
        Payment: 43.48% (>=43.0%) [OK]
   Order-Status: 4.35% (>= 4.0%) [OK]
       Delivery: 4.35% (>= 4.0%) [OK]
    Stock-Level: 4.35% (>= 4.0%) [OK]
依次对应的是订单支付、查询订单、发货、查询库存4项业务的占比,加上没有体现的创建订单的占比,为100%。


在命令行的最后,输出了一项名为TpmC的指标:
<TpmC>
                 16764.600 TpmC

这项指标可以理解为整体性能指标,达标了本系统每分钟能够处理的订单数量。注意这里是分钟,因为tpm是Transactions per minute的简写,而C指的就是执行TPC-C基准测试。

tpcc_start命令执行的完整返回结果参见:
http://blog.csdn.net/yumushui/article/details/37762723



Tpcc没有收集系统性能指标,我们科通过其他途径对此期间的系统性能进行收集,重点关注CPU和系统平均负载。



你可能感兴趣的:(mysql)