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=1if [ -n "\$2" ]
then
TIMESLOT=\$2
echo "Defined \$2"
ficat \$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.mzph.cn/diannao/60003.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ArcGIS软件之“计算面积几何”地图制作

目录 一、消防站的泰森多边形ex12二、人口调查的泰森多边形三、人口调查的泰森多边形属性设置四、计算面积几何,用于求密度五、求密度六、给“现有中学”属性 R1赋值七、“现有中学”设置多环缓存区 并为它赋值八、“土地使用”为不同的功能区赋值九、三个图层相交十、计算面积…

【Web前端】使用 JSON 处理数据

JSON 是一种基于 JavaScript 对象语法的数据格式&#xff0c;由道格拉斯克罗克福特推广。尽管其语法源于 JavaScript&#xff0c;JSON 仍然是独立于 JavaScript 的&#xff0c;这也是为什么许多编程环境能够解析和生成 JSON 的原因。JSON 可以以对象或字符串的形式存在&#xf…

SMOTE算法深度解析及代码实现

SMOTE算法介绍 SMOTE算法是较为常用的数据增广算法&#xff0c;其核心思路是在少数类别样本内部进行数据合成&#xff0c;更具体的说&#xff0c;其后隐藏的猜想是假定样本 x 0 , x 1 , . . , x N x_0,x_1,..,x_N x0​,x1​,..,xN​都为同一类别&#xff0c;那么他们的线性组合…

网络安全属性详解

网络安全属性是网络安全领域进行安全态势评估的信息要素之一。以下是关于网络安全属性的详细介绍&#xff1a; 一、定义与重要性网络安全属性是指网络安全所具备的关键特性&#xff0c;这些特性共同构成了网络安全的基础。在网络安全态势评估中&#xff0c;利用网络安全属性的历…

Docker Compose部署Rabbitmq(Dockerfile安装延迟队列)

整个工具的代码都在Gitee或者Github地址内 gitee&#xff1a;solomon-parent: 这个项目主要是总结了工作上遇到的问题以及学习一些框架用于整合例如:rabbitMq、reids、Mqtt、S3协议的文件服务器、mongodb github&#xff1a;GitHub - ZeroNing/solomon-parent: 这个项目主要是…

基于Redis缓存机制实现高并发接口调试

创建接口 这里使用的是阿里云提供的接口服务直接做的测试&#xff0c;接口地址 curl http://localhost:8080/initData?tokenAppWithRedis 这里主要通过参数cacheFirstfalse和true来区分是否走缓存&#xff0c;正常的业务机制可能是通过后台代码逻辑自行控制的&#xff0c;这…

论软件可靠性设计及其应用

摘要 2023 年 3 月&#xff0c;我所在的公司承接了某智慧加油站平台的建设工作。该项目旨在帮助加油站提升运营效率、降低运营成本和提高销售额。我在该项目中担任系统架构设计师&#xff0c;负责整个项目的架构设计工作。 本文结合我在该项目中的实践&#xff0c;详细论述了…

鸿蒙系统:智能生态的新纪元与开发者的新机遇

正文&#xff1a; 在数字化时代&#xff0c;操作系统作为智能设备的灵魂&#xff0c;其重要性不言而喻。随着技术的不断进步&#xff0c;我们见证了安卓和iOS在全球范围内的广泛应用和影响力。如今&#xff0c;鸿蒙系统&#xff08;HarmonyOS&#xff09;以其创新的分布式架构…

Netty入门二

文章目录 EventLoopChannelFuture 与 PromiseHandler与PipelineByteBuf Netty的核心组件包括以下几种&#xff1a; EventLoop&#xff1a;负责处理注册到其上的channel的所有I/O事件。Channel&#xff1a;表示数据传输的网络通道。Future 与 Promise&#xff1a;Future用于等待…

一文读懂剪枝(Pruner):大模型也需要“减减肥”?

当你听到「剪枝」二字&#xff0c;或许会联想到园丁修整枝叶的情景。而在 AI 大模型领域&#xff0c;这个词有着特殊的含义 —— 它是一种通过“精简”来提升大模型效率的关键技术。随着 GPT、LLaMA 等大模型规模的持续膨胀&#xff0c;如何在保持性能的同时降低资源消耗&#…

简单的人脸识别签到程序 python笔记

简单的人脸识别签到程序 这是我自己根据之前的文章《简单的签到程序》修改出来签到程序&#xff0c;还在学习之中&#xff0c;代码还有很多可以优化的地方。 UI代码 有不少地方可以优化一下&#xff0c;但是不想改了。 import PySimpleGUI as sg from MYSQL1 import * impo…

单词反转和数组去重,附经典面试题一份

博彦科技笔试&#xff1a; 给定字符&#xff0c;拼接成单词进行反转单词&#xff1b; package org.example;public class Main {public static void main(String[] args) {char[] input {h, e, l, l, o, , w, o, r, l, d, , J, a, v, a};String inputToString new String(…

【51单片机】UART串口通信原理 + 使用

学习使用的开发板&#xff1a;STC89C52RC/LE52RC 编程软件&#xff1a;Keil5 烧录软件&#xff1a;stc-isp 开发板实图&#xff1a; 文章目录 串口硬件电路UART串口相关寄存器 编码单片机通过串口发送数据电脑通过串口发送数据控制LED灯 串口 串口是一种应用十分广泛的通讯接…

构建智能防线 灵途科技光电感知助力轨交全向安全防护

10月27日&#xff0c;在南京南站至紫金山东站间的高铁联络线上&#xff0c;一头野猪侵入轨道&#xff0c;与D5515次列车相撞&#xff0c;导致设备故障停车。 事故不仅造成南京南站部分列车晚点&#xff0c;还在故障排查过程中导致随车机械师因被邻线限速通过的列车碰撞而不幸身…

不使用递归的决策树生成算法

不使用递归的决策树生成算法 利用队列 queue &#xff0c;实现层次遍历&#xff08;广度优先遍历&#xff09;&#xff0c;逐步处理每个节点来建立子树结构。再构建一个辅助队列&#xff0c;将每个节点存储到 nodes_to_process 列表中&#xff0c;以便在树生成完成后可以反向遍…

【PB】 使用for循环,循环次数比较多时,datastore 获取数据异常的问题。

以往在使用datastore时&#xff0c;不注意及时销毁&#xff0c;毕竟一次处理数据&#xff0c;数量很少。 本次碰到一个问题&#xff0c;批量处理数据&#xff0c;for循环次数在1000次左右&#xff0c;每个for循环处理 3 个函数&#xff0c;每个函数中有3-4个datastore&#xff…

自动驾驶系列—自动驾驶如何实现厘米级定位?深入解读GPS/RTK技术与应用

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

DevOps业务价值流:需求设计最佳实践

DevOps实践正推动着产品快速迭代与高质量交付&#xff0c;但需求设计作为产品开发的关键起点&#xff0c;往往被忽视。它不仅是收集与分析需求的过程&#xff0c;更是将需求转化为可实施产品特性的核心。本文深入探讨DevOps业务价值流中的需求设计&#xff0c;从调研、整理、原…

【MySQL】数据库整合攻略 :表操作技巧与详解

前言&#xff1a;本节内容讲述表的操作&#xff0c; 对表结构的操作。 是对表结构中的字段的增删查改以及表本身的创建以及删除。 ps&#xff1a;本节内容本节内容适合安装了MySQL的友友们进行观看&#xff0c; 实操更有利于记住哦。 目录 创建表 查看表结构 修改表结构 …

python可视化进阶

引用&#xff1a; 首先需要安装 plotnine from plotnine import* import joypy数据可视化进阶操作 3.1 类别数据可视化 【例3-1】——绘制简单条形图 【代码框3-1】——绘制简单条形图 # 图3-1的绘制代码 import pandas as pd import matplotlib.pyplot as plt from cvxpy …