当前位置: 首页 > article >正文

percona tpc-c程序压测mysql8.0并绘图

1 概述

OLTP数据库选型一般会从稳定性、性能、易用性、官方文档等因素考虑。而在性能这因素,基准测试有sysbench和tpc-c(tpc-e是tpc-c的升级版)。sysbench的底层测试用例的表结构是简单的,并且不支持join,针对以上两个缺点,tpc-c的测试用例的表结构的设计相对合理,也支持join,因此tpc-c的压测结果比sysbench更能模拟实际生产环境。

TPC(事务处理性能协会:Tracsaction Processing Performance Council),是一个大型非盈利的组织,致力于制定了应用标准程序Benchmark的标准规范。

TPC-C是TPC为OLTP数据库提供的Benchmark规范。它包含了NewOrder(新订单的生成)、Payment(订单付款)、OrderStatus(最近订单查询)、Delivery(配送)和StockLevel(库存缺货状态分析)等五类业务事务模型。TPC-C使用tpmC值(Transactions per Minute)来衡量系统最大有效吞吐量(MQTh,Max Qualified Throughput),其中Transactions以NewOrder Transaction为准,即最终衡量单位为每分钟处理的新订单数。

基于TPC-C此规范的实现一般有2个,一个是BenchmarkSQL (JAVA程序),一个是TPCC-MySQL(C程序)。

TPCC-MySQL是Percona公司基于TPC-C衍生出来的标准规范,专门用于MySQL基准测试,可运行于 Windows、Linux、Mac等操作系统之上。

本文介绍TPCC-MySQL的使用。

2 环境

目标mysql是mysql 8.0,通过容器部署,IP端和端口是:192.168.243.128:3307。
TPCC-MySQL机器是一台centos 7.9服务器,通过docker容器来运行一个ubuntu 20,容器中运行TPCC-MySQL程序和绘图程序gnuplot。


3 部署

3.1 docker容器部署mysql 8.0

docker run -p 3307:3306 --name mysql-demo2 -e MYSQL_ROOT_PASSWORD=password -d mysql:8.0

3.2 在ubuntu容器中下载和编译TPCC-MySQL、初始化表结构

docker run -it registry.cn-hangzhou.aliyuncs.com/acs/ubuntu:20.04 bash
apt-get update
apt-get install -y make gcc git
apt-get install -y mysql-server libmysqlclient-dev
cd /opt
git clone https://github.com/Percona-Lab/tpcc-mysql.git
cd tpcc-mysql

此时ubuntu容器中已安装mysql客户端,使用mysql客户端来初始化TPCC-MySQL的测试数据的表结构。

mysql -h 192.168.243.128 -P 3307 -uroot -ppassword -e "create database tpcc1000"
mysql -h 192.168.243.128 -P 3307 -D tpcc1000 -uroot -ppassword < create_table.sql
mysql -h 192.168.243.128 -P 3307 -D tpcc1000 -uroot -ppassword < add_fkey_idx.sql

进入src目录编译TPCC-MySQL,编译成功后会在主目录中出现tpcc_load和tpcc_start这两个可执行二进制文件。

cd src/
make

在这里插入图片描述


4 压测

4.1 准备测试数据

-w参数表示仓库的个数,仓库的个数越大,测试数据则越多。线上环境该参数可设置成100-1000之间,本次测试活动设置为3。

./tpcc_load -h 192.168.243.128 -P 3307 -d tpcc1000 -u root -p password -w 3

4.2 执行压测命令

tpcc_start的所有命令行参数:

***************************************
*** ###easy### TPC-C Load Generator ***
***************************************
./tpcc_start: invalid option -- '-'
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

-w参数指定仓库的数量。
-c参数指定并发连接数。在生产环境可以设置成几百到几千。
-r参数指定开始测试前进行预热的时间(单位是秒),预热后测试效果更好。
-l参数指定压测的持续时间,单位是秒。在生产环境一般要求持续8小时以上。

./tpcc_start -h 192.168.243.128 -P 3307 -d tpcc1000 -u root -p password \
-c 32 \
-r 20 \
-l 100 > /tmp/tpcc-output.log

在这里插入图片描述在这里插入图片描述
最后会出现一个叫TpmC的指标,它表示每分钟处理的事务的数量。


5 绘图

绘图也是在ubuntu容器中进行,将TpmC指标进行绘图。

5.1 安装gnuplot和libqt5gui5

apt-get update
apt-get install libqt5gui5  -y
apt-get install gnuplot -y

还需执行如下命令:

strip --remove-section=.note.ABI-tag /usr/lib/x86_64-linux-gnu/libQt5Core.so.5

如果不执行上一条命令,后续的操作会导致如下现象:

gnuplot: error while loading shared libraries: libQt5Core.so.5: cannot open shared object file: No such file or directory

5.2 创建数据提取的脚本analyze.sh

脚本用于提取数据。

cat > /tmp/analyze.sh << EOF
TIMESLOT=1

if [ -n "\$2" ]
then
TIMESLOT=\$2
echo "Defined \$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+=\$1; } if ( cntr==timeslot ) { printf ("%d %3f\n",aggr,\$3) ; cntr=0; aggr=0  }  } '

EOF

在这里插入图片描述

5.3 提取数据

从日志中提取想要的数据(时间和事务数),输出文件放到/tmp目录中。

sh /tmp/analyze.sh /tmp/tpcc-output.log > /tmp/tpcc-output.data

在这里插入图片描述
第一列是时间,第二列是事务数。


5.4 绘图

创建一个gnuplot命令的配置文件log.conf,指定输出文件tpcc.gif和输入文件tpcc-output.data。

cat > /tmp/log.conf << EOF
set terminal gif small size 480,360 #指定输出成gif图片,且图片大小为550×25
set output "tpcc.gif" #指定输出gif图片的文件名
set title "MySQL Performance" #图片标题
set style data lines #显示网格
set xlabel "Time/s" #X轴标题
set ylabel "Data" #Y轴标题
set grid #显示网格
plot "tpcc-output.data" using 1:2 title "Total throughput" with lines #从tpcc-output.data文件中读取第一列和第二列作为X轴和Y轴数据,示例名"Total throughput"

EOF

通过gnuplot来绘图,命令如下:

cd /tmp/
cat log.conf | gnuplot

在这里插入图片描述

在这里插入图片描述

6 小结

本文介绍了percona公司的TPCC-MySQL这款基准测试程序的下载、编译,和通过使用它来对mysql进行实际的压测,最后将压测结果绘图。


http://www.kler.cn/a/388931.html

相关文章:

  • 力扣104 : 二叉树最大深度
  • Rust 所有权机制
  • 冗余连接2 hard题 代随C#写法
  • NoSQL数据库与关系型数据库的主要区别
  • SpringBoot(八)使用AES库对字符串进行加密解密
  • 学Linux的第八天
  • 数据库的挂起 提交和事务
  • 学习日记_241110_局部线性嵌入(Locally Linear Embedding, LLE)
  • Hive 查询各类型专利 top10 申请人及专利申请数
  • 20241105编译荣品的Android13并给荣品PRO-RK3566开发板刷机
  • 【网络】传输层——UDP协议
  • #渗透测试#SRC漏洞挖掘#深入挖掘CSRF漏洞01
  • 基于卷积神经网络的车辆损坏部位检测系统带gui
  • 基于ADC12DJ5200 采样率10.4GS/s的AD子卡设计方案
  • 【数学二】线性代数-向量-向量组的秩、矩阵得秩
  • Oracle EBS工具脚本
  • 科大讯飞面经,蛮简单的
  • C++数学
  • 1547. 切棍子的最小成本-cangjie
  • STM32F103C8T6学习笔记4--模拟旋转编码器的按键中断
  • 【MongoDB】MongoDB的聚合(Aggregate、Map Reduce)与管道(Pipline) 及索引详解(附详细案例)
  • 【业务】支付总结和GP支付功能测试
  • LRU缓存算法
  • Java集合框架之数组列表(ArrayList)
  • SDL事件相关
  • 中安OCR电子行驶证、驾驶证识别,助力便捷出行与智慧交通