介绍两个压测工具pgbench\sysbench,可视化监控工具NMON

性能评估做不好,开会又领导点名叼了。/(ㄒoㄒ)/~~ /(ㄒoㄒ)/~~ /(ㄒoㄒ)/~~
挨叼了,也要写文章,记录下我的笔记。
写篇文章
对数据库、OS性能的性能评估,需要选择合适的压测工具,给找出数据库的运行瓶颈

pgbench

这是postgresql数据库安装的时候自带的一个压测工具,主要用于测试以下几个指标
image.png
指标数据讲解

transaction type: insert_data.sql
scaling factor: 1 ##缩放因子(scaling factor)决定了初始化时插入的测试数据的规模
query mode: simple ##查询模式。simple 模式表示使用简单的 SQL 查询模式
number of clients: 1 ##并发客户端的数量。这里是发起一个客户端链接
number of threads: 1 ##用于执行测试的线程数,这里表示一个线程数
duration: 60 s ##压测持续时间,这里表示压测持续60秒
number of transactions actually processed: 11 ## 压测时间段内的事务处理数量
latency average = 5878.522 ms ##平均延迟时间。延迟表示每个事务的平均处理时间
initial connection time = 5.295 ms ##链接客户端花费时间
tps = 0.170111 (without initial connection time) ##每秒事务处理数

pgbench可以指定执行脚本进行压测,但是不适合大数据容量的脚本,每次pgbench加载压测脚本的时候,可能会需要花费大量的时间,观察数据库的TPS 指标使用pgbench是一个不错的选择。

pgbench 常用的参数
首次使用pgbench的时候  需要时i对数据库进行初始,pgbench会在对应的压测数据库创建对应的压测表
执行
pgbench -i  
会在数据库创建以下几张表,用于pgbench 的压测指标
public.pgbench_accounts
public.pgbench_branches
public.pgbench_history
public.pgbench_tellers
在自定义压测脚本的时候,需要注意对应几个表存在的约束条件。避免执行报错。

列举,使用自定义脚本,测试数据库批量插入情况的TPS 使用情况了。

##首先删掉压测表的约束
alter table pgbench_accounts drop CONSTRAINT pgbench_accounts_pkey ;
alter table pgbench_accounts alter  column aid drop not null ;
使用脚本,自动生成两万条SQL语句
for i in {1..20000}; do echo "INSERT INTO pgbench_accounts (bid, abalance, filler) VALUES (0, 0, 'filler');" >> insert_data.sql; done

使用自定义脚本进行压测
pgbench -f insert_data.sql 
建议不要使用过多的调试参数,调试参数的使用,可能会导致延迟的提高
常见的几个使用参数如下
pgbench -c 10  -C  -j 10 -r -t 1000 -M prepared

参数介绍如下,

-c, --client=NUM: 并发数据库客户端的数量(默认:1)。
-C, --connect: 每个事务建立新的连接。
-D, --define=VARNAME=VALUE: 定义自定义脚本中使用的变量。
-j, --jobs=NUM: 使用的线程数(默认:1)。
-l, --log: 将事务时间写入日志文件。
-L, --latency-limit=NUM: 将执行时间超过 NUM 毫秒的事务记为延迟事务。
-M, --protocol=simple|extended|prepared: 提交查询时使用的协议(默认:simple)。
-n, --no-vacuum: 在测试前不运行 VACUUM。
-P, --progress=NUM: 每隔 NUM 秒显示进度报告。
-r, --report-latencies: 报告每个命令的平均延迟时间。
-R, --rate=NUM: 目标事务处理速率(每秒事务数)。
-s, --scale=NUM: 报告输出中的缩放因子。
-t, --transactions=NUM: 每个客户端执行的事务数(默认:10)。
-T, --time=NUM: 基准测试持续时间(秒)。
-v, --vacuum-all: 在测试前对所有四个标准表运行 VACUUM。
--aggregate-interval=NUM: 按 NUM 秒间隔聚合数据。
--log-prefix=PREFIX: 事务时间日志文件的前缀(默认:"pgbench_log")。
--progress-timestamp: 使用 Unix 纪元时间戳显示进度。
--random-seed=SEED: 设置随机种子("time", "rand", 整数)。
--sampling-rate=NUM: 日志记录事务的比例(例如,0.01 表示记录 1% 的事务)。
--show-script=NAME: 显示内置脚本代码,然后退出。

当你需要跨库执行压测的时候

-h, --host=HOSTNAME: 数据库服务器主机名或套接字目录。
-p, --port=PORT: 数据库服务器端口号。
-U, --username=USERNAME: 以指定的数据库用户连接。

总的来说,pgbench 在测试数据库事务处理能,是一个非常值得参考的工具,但是其并不太适合于大规模批量的数据压力测试

sybench

安装sysbench

yum install sysbench 

安装完sysbench之后,会在 /usr/share/sysbench/ 目录下生成压测脚本
image.png
sysbench 是一个可以针对mysql \postgresql 进行压测的工具
在初次使用该工具的时候,需要使用初始数据库,他会在数据库生成对应的压测脚本和数据,使用该工具对数据库进行压测,主要分为prepare、run、clean三个阶段。sysbench也支持 prewarm ,将数据加载到缓存中,可以提高数据在缓存区的命中率,这在postgresql数据库中测试复杂查询的时是非常有用的方法,相当于数据库使用的pg_prefaulter插件。

示例

当我们在测试单次批量脚本测试的时候

##初始化脚本
sysbench /usr/share/sysbench/select_random_points.lua \
  --db-driver=pgsql \
  --pgsql-host=localhost \
  --pgsql-port=5432 \
  --pgsql-user=pgbench  \
  --pgsql-password=pgbench \
  --pgsql-db=postgres \
  --tables=10 \
  --table-size=100000 \
  prepare


##运行测试数据
sysbench /usr/share/sysbench/select_random_points.lua \
  --db-driver=pgsql \
  --pgsql-host=localhost \
  --pgsql-port=5432 \
  --pgsql-user=pgbench \
  --pgsql-password=pgbench \
  --pgsql-db=postgres \
  --tables=10 \
  --table-size=100000 \
  --threads=8 \
  --time=60 \
  --report-interval=10 \
  run

##清理测试数据
sysbench /usr/share/sysbench/select_random_points.lua \
  --db-driver=pgsql \
  --pgsql-host=localhost \
  --pgsql-port=5432 \
  --pgsql-user=pgbench \
  --pgsql-password=pgbench \
  --pgsql-db=postgres \
  --tables=10 \
  --table-size=100000 \
  cleanup

sysbench 除了可以测试数据库的性能,还可以测试操作系统的性能

示例

1、测试IO性能
sysbench fileio --file-total-size=2G prepare  # 准备测试文件
sysbench fileio --file-total-size=2G --file-test-mode=rndrw --time=60 --max-requests=0 run  # 运行测试 

–file-total-size=2G:设置总文件大小。
–file-test-mode=rndrw:设置文件测试模式,可以是 seqwr(顺序写)、seqrewr(顺序重写)、seqrd(顺序读)、rndrd(随机读)、rndwr(随机写)和 rndrw(随机读/写)。
–time=60:设置测试持续时间。
–max-requests=0:设置最大请求数,0 表示无限制。
image.png

2、测试 CPU 性能。
sysbench cpu --cpu-max-prime=20000 run

–cpu-max-prime=20000:设置计算的最大质数。
image.png

3、测试内存性能。
sysbench memory --memory-block-size=1M --memory-total-size=10G run

–memory-block-size=1M:设置内存块大小。
–memory-total-size=10G:设置总内存大小。
image.png

4、测试线程子系统性能
sysbench threads --threads=4 --time=60 run

–threads=4:设置线程数。
–time=60:设置测试持续时间
image.png

5、测试互斥锁性能。
sysbench mutex --threads=4 --mutex-num=1024 --time=60 run

–threads=64:设置线程数。
–mutex-num=1024:设置互斥锁数量。
–time=60:设置测试持续时间。
image.png

当然以上的pgbench和sysbench 都是给予测试给出的平均值,和最大值、最小值。但是在整个运行过程中,性能的波动,也是需要观测到的。这里使用一个简化的工具NMON

yum install nmon -y

这是一款非常轻量化的系统监控工具,在安装完成后,还需要使用其自己的分析器Nmon Analyser,将采集的数据进行可视化展示。
Nmon Analyser下载地址
image.png
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
下载完Nmon Analyser后,里面会有两个文件,(一个说明书、一个excel的可视化分析器)、同时使用WPS还需要安装 一个宏插件

image.png

在操作系统的采集压测期间系统性能数据

nmon -f -s 1 -c 1200

-f 将数据生成CSV文件
-s 1 每一秒采集一次数据
-c 采集1200次,也就是20分钟
文件名称默认使用 hostname_年月日_启动时间
image.png
将生成的文件使用Nmon Analyser中excel文件进行打开。
image.png
注意在打开的时候,记得启用宏,然后点击Analyze nmon data 选择采集的数据文件
image.png
生的可视化文档会有以下几个sheet。
image.png

SYS_SUMM、AAA、BBBP、DISK_SUMM、CPU_ALL、CPU_SUMM、DISKBSIZE、DISKBUSY、DISKREAD、DISKWRITE、DISKXFER、JFSFILE、MEM、NET、NETPACKET
、PROC、VM、ZZZZ、CPU001、CPU002

根据可视化图标可以进行定位相关的性能瓶颈

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/760858.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis 集群模式

一、集群模式概述 Redis 中哨兵模式虽然提高了系统的可用性,但是真正存储数据的还是主节点和从节点,并且每个节点都存储了全量的数据,此时,如果数据量过大,接近或超出了 主节点 / 从节点机器的物理内存,就…

【每日刷题】Day78

【每日刷题】Day78 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 1608. 特殊数组的特征值 - 力扣(LeetCode) 2. 1385. 两个数组间的距离值 - …

实现胶囊神经网络,识别手写MNIST数据集,谈谈实现及理解。

🏆本文收录于《CSDN问答解答》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&…

在安装HDFS过程中遇见Permission denied

HDFS Shell命令权限不足问题解决 问题 想必有同学在实战Shell的时候,遇到了: Permission denied: userroot, accessWRITE, inode"/":hadoop:supergroup:drwxr-xr-x 这种类似的问题。 问题的原因就是没有权限,那么为什么呢&#…

C# OpenCvSharp 实现Reinhard颜色迁移算法

C# OpenCvSharp 实现Reinhard颜色迁移算法 目录 效果 项目 代码 下载 效果 项目 Reinhard颜色迁移算法的步骤: 1、将参考图片和目标图片转换到LAB空间下 2、得到参考图片和目标图片的均值和标准差 3、对目标图片的每一个像素值,减去目标图像均值然后…

【数据结构(邓俊辉)学习笔记】二叉搜索树04——AVL树

文章目录 1.重平衡1.1 AVL BBST1.2 平衡因子1.3 适度平衡1.4 接口1.5 失衡 复衡 2. 插入2.1 单旋2.2 双旋2.3 实现 3. 删除3.1 单旋3.2 双旋3.3 实现 4. (3 4)-重构4.1 "34"重构4.2 "34"实现4.3 rotateAt4.4 综合评价 1.重平衡 1…

自动雪深传感器的类型

TH-XL2随着科技的飞速发展,气象监测技术也在不断进步。在降雪天气频发的冬季,雪深数据对于保障道路交通、农业生产和电力供应等具有至关重要的作用。自动雪深传感器作为气象监测的重要工具,其类型多样、功能各异,为气象数据的准确…

让GNSSRTK不再难【第17讲 RTK定位技术原理-站间单差浮点解--第1部分】

第17讲 RTK定位技术原理-站间单差浮点解 RTK技术其实就是在RTD技术的基础上增加载波观测值的使用。由于伪距的误差在分米量级,即使我们通过站间单差消除掉绝大部分的伪距误差,但受限于伪距的精度,我们也只能达到分米量级的定位水平。 但载波…

.NET 矩阵6月红队工具和资源集合

01外网入口打点 1.1 Sharp4WbemScripting 1.2 ASP4Eval 1.3 Sharp4Web.config 1.4 Sharp4AddScript 02安全防御绕过 2.1 Sharp4DefenderStop 03搭建代理隧道 3.1 Sharp4suo5 04混淆加密防护 4.1 Obfuscar混淆器 4.2 Sharp4BatchGuard 05安全技术文档 5.1 .NET 通过Junction Fol…

对原生textarea加上:当前输入字数/最大输入字数

源码: <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>Textarea Character Counter with Dragga…

OpenCV 张正友标定法(二)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 在之前的博客OpenCV 张氏标定法中,我们没有考虑镜头畸变等因素,因此计算出的内参与外参均是理想情况下的数值,而如果我们考虑到镜头的畸变: 我们就需要考虑使用最小二乘法最小化像素坐标的重投影误差(上述所求…

Python中的数据结构

一.堆 堆的建立可以通过导入heapq库来实现 在Python中建立的是最小堆 即heap[k]<heap[2*k1]and heap[k]<heap[2*k2] 下面是一些 堆使用的方法 heapq.heappush([],加入的元素) heapq.heappop(heap)弹出最小的元素 heapq.nlargest(3,heap)返回最大的三个元素 hea…

无人机赋能自然资源调查

确权 业务挑战 由于测绘人员难以到达现场&#xff0c;确权区域大&#xff0c;传统人工测绘覆盖 不全面&#xff0c;信息不完整 传统测绘成果单一&#xff0c;现场核实难度高&#xff0c;确权采集信息不对称 无人机优势 数据采集效率是人工的10倍以上&#xff0c;可自动将…

【数学建模】 进化计算与群体智能

文章目录 进化计算与群体智能1. 遗传算法理论与实现1.1 遗传算法介绍1.2 遗传算法详细示例流程1) 初始种群2) 适应度评估3) 选择&#xff08;轮盘赌法&#xff09;4) 交叉5) 变异6) 迭代 1.3 遗传算法的实现1.4 scikit-opt 库实现遗传算法1.4.1 求解函数极值代码实现代码说明运…

智能制造 v3.13.14 发布,ERP、MES 更新

智能制造一体化管理系统 [SpringBoot2 - 快速开发平台]&#xff0c;适用于制造业、建筑业、汽车行业、互联网、教育、政府机关等机构的管理。包含文件在线操作、工作日志、多班次考勤、CRM、ERP 进销存、项目管理、EHR、拖拽式生成问卷、日程、笔记、工作计划、行政办公、薪资模…

C++20中的三向比较运算符(three-way comparison operator)

在C20中&#xff0c;引入了一个新的特性&#xff0c;即"三向比较运算符(three-way comparison operator)"&#xff0c;由于其外观&#xff0c;也被称为"宇宙飞船运算符(spaceship operator)"&#xff0c;其符号为<>。目的是简化比较对象的过程。这个…

八爪鱼现金流-032,给用户发邮件提示功能

每个月的 5 号、15 号、25 号的 17:30 工资日&#xff0c;给用户发送邮件&#xff0c;提示记账月报。 您也来记账一笔吧。 然后首页能看到趋势图。 八爪鱼现金流 八爪鱼

使用Petalinux设计linux系统

文章目录 1.通过 Vivado 创建硬件平台&#xff0c;得到 hdf 硬件描述文件2.设置 Petalinux 环境变量3.创建 Petalinux 工程4.配置Petalinux 工程5.配置Linux内核6.配置Linux根文件系统7.配置设备树文件8.编译 Petalinux 工程9.制作BOOT.BIN启动文件10.制作SD启动卡 1.通过 Viva…

智能旅行规划的未来:大模型与形式化验证的融合

我们在做旅行规划时面对众多的目的地选择、复杂的交通连接、预算限制以及个人偏好等多重因素&#xff0c;即使是最有经验的旅行者也可能会陷入选择困境。传统的旅行规划方法往往依赖于人工操作&#xff0c;这不仅耗时耗力&#xff0c;而且难以保证计划的最优性和可执行性。 本…