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

news2025/1/19 11:22:54

性能评估做不好,开会又领导点名叼了。/(ㄒ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.coloradmin.cn/o/1881036.html

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

相关文章

Python 类

文章目录 定义类与对象成员方法构造方法魔术方法私有成员继承复写父类成员调用父类成员 多态 定义 class 类名:成员变量成员方法变量类名()# 创建对象 变量.成员变量# 使用成员变量 变量.成员方法类与对象 类相当于设计图纸,规定了各种属性与行为。 对象也就是按照…

STM32之四:TIM定时器(1-基本定时器)

目录 1. STM32有哪些定时器 2. 基本定时器 2.1 基本定时器主要功能 2.2 基本定时器的框图 2.2.1 时钟输入 2.2.2 至DAC 2.2.3 至时基单元(重点) 2.2.4 影子寄存器 2.2.5 基本定时器寄存器说明 2.2.5.1 控制寄存器1(TIMx_CR1&#x…

零刻SER8 8845HS设置RAID磁盘阵列教程

SER8内置两个NVme硬盘位,支持硬盘RAID功能,目前支持以下几种RAID模式。 Volume(卷):将多块硬盘拼接成一个大硬盘,也称为JBOD(Just a Bunch Of Disks)。它不要求硬盘容量相同&#xf…

设计模式 - 桥接模式,就要这样学!

目录 开始 为什么引入桥接模式 桥接模式概述 桥接模式实现 桥接模式的扩展性 开始 为什么引入桥接模式 问题:针对 不同品牌 的 不同类型手机 实现 open、close、call 操作. 如果将来新增一个手机类型,例如 IPhone,就需要继续写对应的三…

项目如何整合sentinel

1、添加依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifact…

嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间

目录 1 进程时间概念 2 times 函数 2.1 times 函数介绍 2.2 示例程序 3 clock 函数 3.1 clock 函数介绍 3.2 示例程序 1 进程时间概念 进程时间指的是进程从创建后&#xff08;也就是程序运行后&#xff09;到目前为止这段时间内使用 CPU 资源的时间总数&#xff0c;出…

音视频入门基础:H.264专题(7)——FFmpeg源码中 指数哥伦布编码的解码实现

音视频入门基础&#xff1a;H.264专题系列文章&#xff1a; 音视频入门基础&#xff1a;H.264专题&#xff08;1&#xff09;——H.264官方文档下载 音视频入门基础&#xff1a;H.264专题&#xff08;2&#xff09;——使用FFmpeg命令生成H.264裸流文件 音视频入门基础&…

【Apache Doris】周FAQ集锦:第 9 期

【Apache Doris】周FAQ集锦&#xff1a;第 9 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目&#xff01; 在这个栏目中&#xff0c;每周将筛选社区反馈的热门问题和话题&#xff0c;重点回答并进行深入探讨。旨在为广大用户和…

2024 InForSec@BCS网络空间安全国际学术研究交流会,同探网安技术创新与应用前沿

6月6日&#xff0c;2024年InForSecBCS网络空间安全国际学术研究交流会在北京国家会议中心成功举办&#xff0c;线上线下近千人参加了本次研讨会。 本次学术研究交流会主题为“网络安全技术创新与应用前沿”&#xff0c;邀请了国内从事人工智能安全、互联网基础设施安全、电磁安…

APP逆向 day7 JAVA基础2

一.前言 昨天我们讲了点java基础&#xff0c;大家是不是觉得就特别简单&#xff0c;今天讲点稍微难一丢丢的基础&#xff0c;也就是java基础2.0&#xff0c;今天我要和大家说的内容十分的重要&#xff0c;直接关乎到下一节的内容&#xff0c;所以&#xff0c;好好学&#xff0…

Python基础小知识问答系列-随机数相关

1. 问题&#xff1a; 如何生成x-y之间的随机整数&#xff1f; 如何生成0-1之间的随机浮点数&#xff1f; 如何生成x-y之间的随机浮点数&#xff1f; 如何从列表中随机获取一个元素&#xff1f; 如何从列表中随机获取多个元素&#xff1f; 如…

VQVAE:Neural Discrete Representation Learning

论文名称&#xff1a;Neural Discrete Representation Learning 开源地址 发表时间&#xff1a;NIPS2017 作者及组织&#xff1a;Aaron van den Oord,Oriol Vinyals和Koray Kavukcuoglu, 来自DeepMind。 1、VAE 简单回顾下VAE的损失函数&#xff0c;ELBO的下界为&#xff1a; …

qt for android 使用打包sqlite数据库文件方法

1.在使用sqlite数据库时&#xff0c;先将数据库文件打包&#xff0c;放置在assets中如下图: 将文件放置下android中的assets下的所有文件都会打包在APK中&#xff0c;可以用7zip查看apk文件 2.在qt代码读取数据文件&#xff0c;注意在assets下的文件都是Read-Only&#xff0c;需…

初阶数据结构之堆讲解

本篇文章带大家学习的是堆&#xff0c;还请各位观众老爷给个三连 正片开始 堆的概念 如果有一个关键码的集合 K { &#xff0c; &#xff0c; &#xff0c; … &#xff0c; } &#xff0c;把它的所有元素按完全二叉树的顺序存储方式存储 在一个一维数组中&#xff0c;并满…

HarmonyOS开发实战:加密类组件使用方法-API

加密类组件 模块介绍RSA提RSA供生成密钥加解密验签等系列方法(基于HarmonyOS API)AES提供AES生成密钥加解密等系列方法(基于HarmonyOS API)DES提供3DES生成密钥加解密等系列方法(基于HarmonyOS API)SM2提供SM2生成密钥加解密等系列方法(基于HarmonyOS API)SM3提供SM3生成摘要,…

vue 自定义组件 实现跟使用

新建文件组件 选择器作用 ~ 波浪线这个是选择 li 后面的所有 a标签 调用 到使用的文件下引入 使用 效果

类似李跳跳的软件有什么,强烈推荐所有安卓手机安装!!!

今天阿星分享一款让安卓手机更顺滑的神器——智慧岛。你问我李跳跳&#xff1f;由于大家都知道的原因&#xff0c;那是个曾经让广告无处遁形的神兵利器&#xff0c;可惜现在它已经退休了。不过别担心&#xff0c;智慧岛接过了接力棒&#xff0c;继续为我们的安卓体验保驾护航。…

爱情再启:庄国栋笑谈“玫瑰人生”爱情觉悟

庄国栋&#xff0c;这位电视剧《玫瑰的故事》中的男主角&#xff0c; 最近在一次采访中坦言&#xff1a;“如果给我一次重来的机会&#xff0c; 我绝对会毫不犹豫地选择爱情&#xff01;” 听到这话&#xff0c; 我不禁想&#xff0c;庄先生&#xff0c;您是不是被剧里的玫瑰…

42.HOOK引擎核心代码

上一个内容&#xff1a;41.HOOK引擎设计原理 以 40.设计HOOK引擎的好处 它的代码为基础进行修改 主要做的是读写寄存器 效果图 添加一个类 htdHook.h文件中的实现 #pragma once class htdHook { public:htdHook(); };htdHook.cpp文件中的实现&#xff1a; #include "…

Java并发编程基础知识点

目录 Java并发编程基础知识点1、线程&#xff0c;进程概念及二者的关系进程相关概念线程相关概念进程与线程的关系补充小知识点&#xff1a; 2、线程的状态Java线程的状态&#xff1a;Java线程不同状态之间的切换图示 3、Java程序中如何创建线程&#xff1f;①、继承Thread类②…