史上最详细的tpcc-mysql基准测试介绍,值得收藏
wptr33 2024-11-24 22:27 22 浏览
概述
TPC-C是专门针对联机交易处理系统(OLTP系统)的规范,一般情况下我们也把这类系统称为业务处理系统。
tpcc-mysql是percona基于TPC-C(下面简写成TPCC)衍生出来的产品,专用于MySQL基准测试。其源码放在launchpad上,用bazaar管理。
一、 安装tpcc-mysql
1、下载源码包
官方:https://code.launchpad.net/~percona-dev/perconatools/tpcc-mysql
官方github:https://github.com/Percona-Lab/tpcc-mysql
wget https://codeload.github.com/Percona-Lab/tpcc-mysql/zip/master
tpcc-mysql的业务逻辑及其相关的几个表作用如下:
New-Order:新订单,一次完整的订单事务,几乎涉及到全部表 Payment:支付,主要对应 orders、history 表 Order-Status:订单状态,主要对应 orders、order_line 表 Delivery:发货,主要对应 order_line 表 Stock-Level:库存,主要对应 stock 表 其他相关表: 客户:主要对应 customer 表 地区:主要对应 district 表 商品:主要对应 item 表 仓库:主要对应 warehouse 表
2、编译安装
编译非常简单,只需要一个 make 即可。
unzip tpcc-mysql-master.zip -d /usr/local/ cd /usr/local/tpcc-mysql-master/src make
如果 make 没有报错,就会在/usr/local/tpcc-mysql-master下生成 tpcc 二进制命令行工具 tpcc_load 、 tpcc_start
3、配置环境变量
echo "export PATH=$PATH:/usr/local/tpcc-mysql-master" >> /etc/profile source /etc/profile
二、TPCC测试前准备
1、创建测试数据库
set global validate_password_policy=0; create database tpcc; grant all privileges on tpcc.* to tpcc@'%' identified by 'tpcc@1234'; flush privileges;
2、初始化测试库环境
#创建表 mysql -uroot -p -h 172.26.151.78 -D tpcc < /usr/local/tpcc-mysql-master/create_table.sql #创建FK和索引 mysql -uroot -p -h 172.26.151.78 -D tpcc < /usr/local/tpcc-mysql-master/add_fkey_idx.sql
3、加载测试数据
tpcc_load用法如下:
tpcc_load [server] [DB] [user] [pass] [warehouse] tpcc_load [server] [DB] [user] [pass] [warehouse] [part] [min_wh] [max_wh]
选项 warehouse 意为指定测试库下的仓库数量。
真实测试场景中,仓库数一般不建议少于100个,视服务器硬件配置而定,如果是配备了SSD或者PCIE SSD这种高IOPS设备的话,建议最少不低于1000个。
执行下面的命令,开始灌入测试数据:
tpcc_load -h 172.26.151.78 -P 3306 -d tpcc -u tpcc -p tpcc@1234 -w 5
在这里,需要注意的是 tpcc 默认会读取 /var/lib/mysql/mysql.sock 这个socket 文件。
ps:tpcc并行加载脚本项目链接 tpcc_load_parallel.sh,加载效率至少提升10倍以上。
三、TPCC压测
tpcc_start 工具用于tpcc压测,其用法如下:
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
几个选项稍微解释下
-w 指定仓库数量 -c 指定并发连接数 -r 指定开始测试前进行warmup的时间,进行预热后,测试效果更好 -l 指定测试持续时间 -i 指定生成报告间隔时长 -f 指定生成的报告文件名
实例:
tpcc_start -h 172.26.151.78 -P 3306 -d tpcc -u tpcc -p tpcc@1234 \ -w 5 -c 16 -r 120 -l 60 -f tpcc_mysql.log >> tpcc_run_result.log 2>&1
说明:模拟5个仓库规模,并发 16个线程进行测试,热身时间为 120秒, 压测时间为 60秒。
真实测试场景中,建议预热时间不小于5分钟,持续压测时长不小于30分钟,否则测试数据可能不具参考意义。
四、TPCC测试结果解读
测试结果输出如下:
*************************************** *** ###easy### TPC-C Load Generator *** *************************************** option h with value '172.26.151.78' --主机 option P with value '3306' --端口 option d with value 'tpcc' --数据库 option u with value 'tpcc' --用户 option p with value 'tpcc@1234' --密码 option w with value '5' --仓库 option c with value '16' --并发数 option r with value '120' --数据预热时长 option l with value '60' --压测时长 option f with value 'tpcc_mysql.log' --输出报告日志文件 <Parameters> [server]: 172.26.151.78 [port]: 3306 [DBname]: tpcc [user]: tpcc [pass]: tpcc@1234 [warehouse]: 5 [connection]: 16 [rampup]: 120 (sec.) [measure]: 60 (sec.) RAMP-UP TIME.(120 sec.) --预热结束,开始进行压测 MEASURING START. --每10秒钟输出一次压测数据 10, trx: 2743, 95%: 47.649, 99%: 60.724, max_rt: 111.180, 2744|114.260, 275|12.523, 274|110.302, 276|183.083 20, trx: 2736, 95%: 46.494, 99%: 59.893, max_rt: 84.122, 2735|91.317, 273|10.343, 273|108.566, 272|202.762 30, trx: 2806, 95%: 46.051, 99%: 57.195, max_rt: 73.239, 2804|75.634, 281|7.229, 281|88.217, 280|146.604 40, trx: 2662, 95%: 45.748, 99%: 55.111, max_rt: 77.804, 2660|111.316, 266|6.176, 266|99.176, 267|152.443 50, trx: 2729, 95%: 47.678, 99%: 61.602, max_rt: 101.055, 2736|72.949, 273|9.053, 274|101.752, 273|149.860 60, trx: 2803, 95%: 44.546, 99%: 57.694, max_rt: 75.418, 2796|92.569, 280|6.037, 279|106.101, 280|142.249 -- 第一列,第N次10秒 -- trx: 2803 - 给定间隔的New Order 的 transaction 数量 -- 95%: 44.546 - 给定间隔95%的New Order transactions的reponse time -- max_rt: 75.418 - 最大New Order transactions的reponse time -- 剩余的都是别的transactions的trx和最大response time --压测结束 STOPPING THREADS................ <Raw Results> [0] sc:0 lt:16480 rt:0 fl:0 avg_rt: 85.4 (5) -- New-Order,新订单业务成功(success,简写sc)次数,延迟(late,简写lt)次数,重试(retry,简写rt)次数,失败(failure,简写fl)次数 [1] sc:457 lt:16018 rt:0 fl:0 avg_rt: 38.9 (5) -- Payment,支付业务统计 [2] sc:1619 lt:29 rt:0 fl:0 avg_rt: 7.6 (5) -- Order-Status,订单状态业务统计 [3] sc:1546 lt:101 rt:0 fl:0 avg_rt: 194.9 (80) -- Delivery,发货业务统计 [4] sc:0 lt:1648 rt:0 fl:0 avg_rt: 301.9 (20) -- Stock-Level,库存业务统计 in 60 sec. # sc:成功数量 lt:延迟数量 fl:失败数量 avg_rt:平均response time <Raw Results2(sum ver.)> [0] sc:0 lt:16480 rt:0 fl:0 [1] sc:457 lt:16019 rt:0 fl:0 [2] sc:1619 lt:29 rt:0 fl:0 [3] sc:1546 lt:101 rt:0 fl:0 [4] sc:0 lt:1648 rt:0 fl:0 <Constraint Check> (all must be [OK]) -- 下面所有业务逻辑结果都必须为 OK 才行 [transaction percentage] Payment: 43.47% (>=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: 0.00% [NG] * -- 下面几个响应耗时指标部分没通过 Payment: 2.77% [NG] * Order-Status: 98.24% [OK] Delivery: 93.87% [OK] Stock-Level: 0.00% [NG] * # 和标准比较 [OK] 合格 [NG] 不合格 <TpmC> 16480.000 TpmC #每分钟事务数(该值是第一次统计结果中的新订单事务数除以总耗时分钟数)
觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~
相关推荐
- 一篇文章带你了解PHP的学习使用(php的教程)
-
ThinkPHP5实战...
- 在memcached管理php的session(memcached libevent)
-
PHP的session(会话管理)一般是以文件形式进行,而在多个Web服务器之间进行session管理时memecached会比文件管理方式更加方便。在这里介绍如何使用memcached管理PHP的s...
- php传值和传引用的区别(php 传值和传引用)
-
php传值:在函数范围内,改变变量值得大小,都不会影响到函数外边的变量值。PHP传引用:在函数范围内,对值的任何改变,在函数外部也有所体现,因为传引用传的是内存地址。传值:和copy是一样的。【打个比...
- PHP 常量详解教程(php常量和变量)
-
常量类似变量,但是常量一旦被定义就无法更改或撤销定义。PHP常量常量是单个值的标识符(名称)。在脚本中无法改变该值。有效的常量名以字符或下划线开头(常量名称前面没有$符号)。注释:与变量不同,常...
- php自学零基础入门小知识(php新手入门教程)
-
我们就把PHP入门当成一个苹果吧!一口一口的吃掉他!不啰嗦了!开始了1、嵌入方法:类似ASP的<%,PHP可以是<?php或者是<?,结束符号是?>,当然您也可以自己指定。2、...
- PHP 语法详解(php语法大全)
-
PHP脚本在服务器上执行,然后向浏览器发送回纯HTML结果。基础PHP语法PHP脚本可放置于文档中的任何位置。PHP脚本以<?php开头,以?>结尾:<?php...
- PHP笔记(一)PHP基础知识(php必背知识点)
-
创建PHP程序PHP代码框架<?php>2.文件命名规则...
- PHP 8新特性之Attributes(注解),你掌握了吗?
-
PHP8的Alpha版本,过几天就要发布了,其中包含了不少的新特性,当然我自己认为最重要的还是JIT,这个我从2013年开始参与,中间挫折无数,失败无数后,终于要发布的东东。不过,今天呢,我不打算谈J...
- PHP基本语法之标记与注释(php注释规范)
-
1、标记由于PHP是嵌入式脚本语言,它在实际开发中经常会与HTML内容混在一起,所以为了区分HTML与PHP代码,需要使用标记对PHP代码进行标识。如:<html>...
- php注解(PHP注解 性能)
-
目标了解和使用php注解,如果你已经掌握其他一种具有注解的语言,例如:java、python等,你在本文中只需要了解点语法就行。示例php8以前的版本,注解写在注释里,如果你掌握其他语言的注解,你是不...
- 数据丢失?别慌!MySQL备份恢复攻略
-
想象一下,某个晴朗的午后,你正享受着咖啡,突然接到紧急电话:你的网站或APP彻底挂了!系统崩溃,界面全白。虽然心头一紧,但你或许还能安慰自己:系统崩溃只是暂停服务,数据还在,修复修复就好了。然而,如果...
- MySQL 日志:undo log、redo log、binlog
-
今天来和大家分享MySQL的三个日志文件,可以说MySQL的多数特性都是围绕日志文件实现,而其中最重要的有以下三种:...
- MySQL三大日志:binlog、redolog、undolog全解析
-
binlog概述在MySQL数据库中,binlog可是个相当重要的存在,它的全称为binarylog,也就是二进制日志。它就像是数据库的“记忆本”,记录了所有的DDL(数据定义语言)和...
- 1、MySQL数据库介绍(mysql数据库简单介绍)
-
1.1数据库的核心定义数据库的本质数据库乃存储数据对象之容器,涵盖如下关键组件:表(Table)...
- MySQL 日志双雄:实时监控与历史归档实战优化
-
MySQL日志双雄:实时监控+历史归档实战用这招让你家日志系统再也不卡不爆炸MySQL十亿级日志处理:从洪峰到归档全攻略手把手教你用MySQL搞定ELK级日志监控在微服务架构大行其道的今天,日志系统早...
- 一周热门
-
-
C# 13 和 .NET 9 全知道 :13 使用 ASP.NET Core 构建网站 (1)
-
因果推断Matching方式实现代码 因果推断模型
-
git pull命令使用实例 git pull--rebase
-
面试官:git pull是哪两个指令的组合?
-
git 执行pull错误如何撤销 git pull fail
-
git pull 和git fetch 命令分别有什么作用?二者有什么区别?
-
git fetch 和git pull 的异同 git中fetch和pull的区别
-
git pull 之后本地代码被覆盖 解决方案
-
还可以这样玩?Git基本原理及各种骚操作,涨知识了
-
git命令之pull git.pull
-
- 最近发表
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)
- git commit (34)