软件世界网 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
移动开发 架构设计 编程语言 Web前端 互联网
开发杂谈 系统运维 研发管理 数据库 云计算 Android开发资料
  软件世界网 -> 系统运维 -> Tpcc -> 正文阅读

[系统运维]Tpcc


TPC-C是专门针对联机交易处理系统(OLTP系统)的规范,一般情况下我们也把这类系统称为业务处理系统。
tpcc-mysql是percona基于TPC-C(下面简写成TPCC)衍生出来的产品,专用于MySQL基准测试。其源码放在launchpad上,用bazaar管理,项目地址:https://code.launchpad.net/~percona-dev/perconatools/tpcc-mysql
服务器大概配置:
两颗6核12线程CPU,相当于12核24线程
64G内存
1T,SAS 15000转/分钟硬盘 
raid5阵列
[img]http://img.blog.csdn.net/20160401163003751

一、 安装tpcc-mysql工具


安装方法一:
安装bzr客户端
# yum -y install bzr
http://imysql.com/wp-content/uploads/2014/09/tpcc-mysql-src.tgz
之后,就可以开始用bzr客户端下载tpcc-mysql源码了
bzr branch lp:~percona-dev/perconatools/tpcc-mysql
安装方法二:
通过下载源码编译安装(推荐)
MySQL中文网便捷下载地址:
http://imysql.com/wp-content/uploads/2014/09/tpcc-mysql-src.tgz
下载到本地后,先执行 gunzip 解压缩文件,再执行 tar xf 解包,直接 tar zxf 可能会报告异常。
# gunzip tpcc-mysql-src.tgz
# tar xf tpcc-mysql-src.tar
# cd tpcc-mysql/src
# make
[img]http://img.blog.csdn.net/20160401135815646
# ls
add_fkey_idx.sql  count.sql  create_table.sql  drop_cons.sql  load.sh  README  schema2  scripts  src  tpcc_load  tpcc_start
[img]http://img.blog.csdn.net/20160401135737427
如果 make 没有报错,就会在 /tmp/tpcc-mysql 下生成 tpcc 二进制命令行工具 tpcc_load 、 tpcc_start
tpcc-mysql的业务逻辑及其相关的几个表作用如下:
New-Order:新订单,一次完整的订单事务,几乎涉及到全部表
Payment:支付,主要对应 orders、history 表
Order-Status:订单状态,主要对应 orders、order_line 表
Delivery:发货,主要对应 order_line 表
Stock-Level:库存,主要对应 stock 表
其他相关表:
客户:主要对应 customer 表
地区:主要对应 district 表
商品:主要对应 item 表
仓库:主要对应 warehouse 表

二、TPCC测试前准备


初始化测试库环境
make命令会在tpcc-mysql目录下生成 tpcc 命令行工具 tpcc_load ,tpcc_start
tpcc_load  提供初始化数据的功能
tpcc_start 进行压力测试
# cd /root/tpcc-mysql
# mysqladmin -uroot -pyourpassword create tpcc1000 # 创建测试用的数据库
# mysql -uroot -pyourpassword  -f tpcc1000 < create_table.sql# 创建测试用的表
# mysql -uroot -pyourpassword tpcc1000 < add_fkey_idx.sql# 创建FK和索引
初始化完毕后,就可以开始加载测试数据了
tpcc_load使用介绍:
# ./tpcc_load --help
tpcc_load [server] [DB] [user] [pass] [warehouse]
Server: 服务器名
DB: 数据库名
user: 用户名
pass: 密码
Warehouse: 仓库的数量
tpcc_start使用介绍:
#./tpcc_start --help
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
介绍一下各个参数的用法
-h server_host: 服务器名
-P port : 端口号,默认为3306
-d database_name: 数据库名
-u mysql_user : 用户名
-p mysql_password : 密码
-w warehouses: 仓库的数量
-c connections : 线程数,默认为1
-r warmup_time : 热身时间,单位:s,默认为10s ,热身是为了将数据加载到内存。
-l running_time: 测试时间,单位:s,默认为20s
-i report_interval: 指定生成报告间隔时长
-f report_file: 测试结果输出文件
选项 warehouse 意为指定测试库下的仓库数量
真实测试场景中,仓库数一般不建议少于100个,视服务器硬件配置而定,如果是配备了SSD或者PCIE SSD这种高IOPS设备的话,建议最少不低于1000个。
执行下面的命令,开始灌入测试数据:
# cd /root/tpcc-mysql
创建150个数据仓库
# ./tpcc_load localhost tpcc1000 root "yourpass" 150
报错
./tpcc_load: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory
解决办法:
# echo "/usr/local/mysql/lib" >>/etc/ld.so.conf
# ldconfig
在这里,需要注意的是 tpcc 默认会读取 /var/lib/mysql/mysql.sock 这个socket 文件。
因此,如果你的 socket 文件不在相应路径的话,可以做个软连接,或者通过TCP/IP的方式连接测试服务器,例如:
cd /root/tpcc-mysql
./tpcc_load 1.2.3.4:3306 tpcc1000 tpcc_user "tpcc_password" 10
加载测试数据时长视仓库数量而定,若过程比较久需要稍加耐心等待。

三、进行测试


# ./tpcc_start -hlocalhost -d tpcc1000 -u root -p "yourpassword" -w 150 -c 24 -r 600 -l 7200 - >tpcc-output-log
报错:
neword 0:4
1062, 23000, Duplicate entry '4-3-3020' for key 'PRIMARY'
[img]http://img.blog.csdn.net/20160401143043174
原来是因为我们改了默认的引擎为MyiSam并且关闭了innodb引擎引起的(生产环境大部分都是myisam的场景,设置了myisam为mysql5.5的默认引擎,而myisam不支持外键所以脚本在创建数据条目的时候不会理会是否主键唯一,这样会造成部分数据主键重复)
default-storage-engine=MyISAM
skip-innodb
[img]http://img.blog.csdn.net/20160401143208299
即:模拟 150个仓库规模,并发 24个线程进行测试,热身时间为 300秒, 压测时间为 2小时。
真实测试场景中,建议预热时间不小于5分钟,持续压测时长不小于30分钟,否则测试数据可能不具参考意义。
测试结果输出如下(tpcc-output-log文件):
-- 本轮tpcc压测的一些基本信息
***************************************
*** ###easy### TPC-C Load Generator ***
***************************************
option h with value 'localhost'         -- 主机
option d with value 'tpcc1000'          -- 数据库
option u with value 'root'              -- 账号
option p with value 'yourpassword'      -- 密码
option w with value '150'               -- 仓库数
option c with value '12'                -- 并发线程数
option r with value '300'               -- 数据预热时长(秒)
option l with value '3600'              -- 压测时长(秒)
non-option ARGV-elements: - 
<Parameters>
     [server]: localhost
     [port]: 3306
     [DBname]: tpcc1000
       [user]: root
       [pass]: yourpassword
  [warehouse]: 150
 [connection]: 12
     [rampup]: 300 (sec.)
    [measure]: 3600 (sec.)
-- 预热结束,开始进行压测
RAMP-UP TIME.(300 sec.)
-- 每10秒钟输出一次压测数据
MEASURING START.
  10, 435(0):3.322|6.846, 435(0):0.672|1.661, 44(0):0.386|0.439, 43(0):4.017|4.847, 44(0):11.076|11.907
  20, 418(0):3.334|3.482, 416(0):0.669|0.728, 41(0):0.355|0.390, 41(0):3.796|4.356, 41(0):10.580|10.781
  30, 410(0):3.332|4.708, 412(0):0.656|1.661, 41(0):0.304|0.308, 42(0):3.844|3.926, 42(0):10.542|10.646
...
  3580, 445(0):3.277|3.402, 447(0):0.658|0.765, 44(0):0.326|0.404, 45(0):3.856|3.950, 44(0):10.805|10.899
  3590, 388(0):3.352|3.589, 391(0):0.697|0.795, 39(0):0.320|0.330, 39(0):3.826|4.009, 39(0):10.638|10.844
  3600, 407(0):3.256|3.390, 405(0):0.676|0.746, 41(0):0.331|0.339, 41(0):3.904|3.910, 41(0):10.625|10.653
 -- 以逗号分隔,共6列
-- 第一列,第N次10秒
-- 第二列,新订单成功执行压测的次数(推迟执行压测的次数):90%事务的响应时间|本轮测试最大响应时间,新订单事务数也被认为是总有效事务数的指标
-- 第三列,支付业务成功执行次数(推迟执行次数):90%事务的响应时间|本轮测试最大响应时间
-- 第四列,订单状态业务的结果,后面几个的意义同上
-- 第五列,物流发货业务的结果,后面几个的意义同上
-- 第六列,库存仓储业务的结果,后面几个的意义同上
-- 压测结束
STOPPING THREADS............
-- 第一次结果统计
<Raw Results>
  [0] sc:144136  lt:5  rt:0  fl:0   -- New-Order,新订单业务成功(success,简写sc)次数,延迟(late,简写lt)次数,重试(retry,简写rt)次数,失败(failure,简写fl)次数
  [1] sc:144148  lt:0  rt:0  fl:0   -- Payment,支付业务统计,其他同上
  [2] sc:14416  lt:0  rt:0  fl:0    -- Order-Status,订单状态业务统计,其他同上
  [3] sc:14416  lt:0  rt:0  fl:0    -- Delivery,发货业务统计,其他同上
  [4] sc:14416  lt:0  rt:0  fl:0    -- Stock-Level,库存业务统计,其他同上
 in 3600 sec.
-- 第二次统计结果,其他同上
<Raw Results2(sum ver.)>
  [0] sc:144147  lt:5  rt:0  fl:0 
  [1] sc:144154  lt:0  rt:0  fl:0 
  [2] sc:14416  lt:0  rt:0  fl:0 
  [3] sc:14416  lt:0  rt:0  fl:0 
  [4] sc:14416  lt:0  rt:0  fl:0 
<Constraint Check> (all must be [OK])   -- 下面所有业务逻辑结果都必须为 OK 才行
 [transaction percentage]
        Payment: 43.48% (>=43.0%) [OK]  -- 支付成功次数(上述统计结果中 sc + lt)必须大于43.0%,否则结果为NG,而不是OK
   Order-Status: 4.35% (>= 4.0%) [OK]   -- 订单状态,其他同上
       Delivery: 4.35% (>= 4.0%) [OK]   -- 发货,其他同上
    Stock-Level: 4.35% (>= 4.0%) [OK]   -- 库存,其他同上
 [response time (at least 90% passed)]  -- 响应耗时指标必须超过90%通过才行
      New-Order: 100.00%  [OK]          -- 下面几个响应耗时指标全部 100% 通过
        Payment: 100.00%  [OK]
   Order-Status: 100.00%  [OK]
       Delivery: 100.00%  [OK]
    Stock-Level: 100.00%  [OK]
<TpmC>
                 2402.350 TpmC - TpmC结果值(每分钟事务数,该值是第一次统计结果中的新订单事务数除以总耗时分钟数,例如本例中是:144136/60 = 2402.350)

四、生成图表

首先写一个脚本获取数据源:
# vim tpcc-output-analyze.sh
#!/bin/sh
TIMESLOT=1
if [ -n "$2" ]
then
TIMESLOT=$2
fi
cat $1 | grep -v HY000 | grep -v payment | grep -v neword | awk -v timeslot=$TIMESLOT 'BEGIN { FS="[,():]"; s=0; cntr=0; aggr=0 } /MEASURING START/ { s=1} /STOPPING THREADS/ {s=0} /0/ { if (s==1) { cntr++; aggr+=$2; } if ( cntr==timeslot ) { printf ("%d %3d\n",$1,(aggr/timeslot)) ; cntr=0; aggr=0 } }'
这个脚本就是对 tpcc-output-log 的第一列与第二列进行运算。
# chmod +x tpcc-output-analyze.sh 
#./tpcc-output-analyze.sh tpcc-output-log > tpcc-graphic-data.txt
绘图过程:
#vim log.conf
set terminal gif small size 480,360 #指定输出成gif图片,且图片大小为550×25
set output "tcpp.gif" #指定输出gif图片的文件名
set title "MySQL Performance" #图片标题
set style data lines #显示网格
set xlabel "Time/s" #X轴标题
set ylabel "Data" #Y轴标题
set grid #显示网格
plot \
"tpcc-graphic-data.txt" using 1:2 title "Total throughput" with lines #从tpcc-graphic-data.txt文件中读取第一列和第二列作为X轴和Y轴数据,示例名"Total throughput"
安装绘图工具gnuplot
# yum install -y gnuplot
运行生成tcpp.gif:
# cat log.conf | gnuplot
可以看到在/root/tpcc-mysql目录下已经生成了tcpp.gif图片文件
[img]http://img.blog.csdn.net/20160401140240413
......显示全文...
    点击查看全文


上一篇文章      下一篇文章      查看所有文章
2016-04-02 21:00:29  
系统运维 最新文章
linux新进程的创建
Muduo网络库源码分析(一)EventLoop事件循
Linux系统分区
haproxylvsnginx负载均衡的比较
PeopleSoft介绍
win7+iis7+asp+.net+php环境配置
执行系统命令并且将输出写到指定日志文件的
linux批量替换多个文件中的字符串
makefile中=、:=和+=的区别
Linux服务器不关机新增硬盘的方法
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 美食菜谱 新闻资讯 电影视频 小游戏 Chinese Culture 股票 租车
生肖星座 三丰软件 视频 开发 短信 中国文化 网文精选 搜图网 美图 阅读网 多播 租车 短信 看图 日历 万年历 2018年7日历
2018-7-23 6:06:48
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  软件世界网 --