介绍两个压测工具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.mzph.cn/bicheng/38154.shtml

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

相关文章

AI音乐的何去何从

引言 在过去的一个月里,多个先进的音乐生成大模型相继上线。这些AI模型不仅降低了普通人创作音乐的门槛,还在音乐圈内引发了关于AI是否会彻底颠覆传统音乐创作的广泛讨论。在短暂的兴奋过后,人们开始理性地审视这些AI产品的版权归属问题&…

【图像超分辨率】一个简单的总结

文章目录 图像超分辨率(Image Super-Resolution, ISR)1 什么是图像超分辨率?2 图像超分辨率通常有哪些方法?(1)基于插值的方法(2)基于重建的方法(3)基于学习的方法(LR im…

Leetcode 78 数组子集

题目描述: 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的 子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1: 输入:nums [1,2,3] 输出&#xff1…

动手学深度学习(Pytorch版)代码实践 -计算机视觉-46语义分割和数据集

46语义分割和数据集 # 图像分割和实例分割 """ 图像分割将图像划分为若干组成区域,这类问题的方法通常利用图像中像素之间的相关性。 它在训练时不需要有关图像像素的标签信息,在预测时也无法保证分割出的区域具有我们希望得到的语义。 图…

企业im(即时通讯)作为安全专属的移动数字化平台的重要工具

企业IM即时通讯作为安全专属的移动数字化平台的重要工具,正在越来越多的企业中发挥着重要的作用。随着移动技术和数字化转型的发展,企业对于安全、高效的内部沟通和协作工具的需求也越来越迫切。本文将探讨企业IM即时通讯作为安全专属的移动数字化平台的…

JAVA学习笔记-JAVA基础语法-DAY19-File类、递归

第一章 File类 1.1 概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。 1.2 构造方法 public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。public File(St…

【Science重磅】以纳米级分辨率重建的人类大脑皮层颗粒片段

翻查五月的Science发现一个有意思的项目《A petavoxel fragment of human cerebral cortex reconstructed at nanoscale resolution》由美国哈佛大学Jeff W. Lichtman 和美国谷歌研究中心 Viren Jain 共同合作 据介绍,充分了解人类大脑是如何工作的机理&#xff0c…

[Redis]主从模式

启动主从复制 由于我们只有一台机器,所以我们只能在机器上开多个redis程序来演示不同的机器 因为一个端口号只能被一个进程绑定,所以我们需要修改配置,绑定不同的端口号,并且还要修改工作目录(数据持久化的位置&#…

七天速通javaSE:第六天 对象:类与对象

文章目录 前言一、认识对象1. 编程思想1.1 面向过程1.2 面向对象 2. 面向对象编程(oop) 二、再识方法1. 修饰符2. 参数的传递与赋值2.1 值传递2.2 引用传递 总结: 三、创建与初始化对象1. 类与对象的关系2. 创建与初始化对象 四、构造函数1. …

Debugging using Visual Studio Code

One of the key features of Visual Studio Code is its great debugging support. VS Code’s built-in debugger helps accelerate your edit, compile, and debug loop. Debugger extensions VS Code 内置了对 Node.js 运行时的调试支持,可以调试 JavaScript、TypeScript…

DarkGPT:基于GPT-4-200k设计的人工智能OSINT助手

关于DarkGPT DarkGPT是一款功能强大的人工智能安全助手,该工具基于GPT-4-200k设计并实现其功能,可以帮助广大研究人员针对泄露数据库进行安全分析和数据查询相关的OSINT操作。 工具要求 openai1.13.3 requests python-dotenv pydantic1.10.12 工具安装 …

Echarts地图实现:杭州市困难人数分布【动画滚动播放】

Echarts地图实现:杭州市困难人数分布 实现功能 杭州市地区以及散点图分布结合的形式数据展示动画轮播可进去杭州市下级地区可返回杭州市地图展示 效果预览 实现思路 使用ECharts的地图和散点图功能结合实现地区分布通过动画轮播展示数据变化实现下级地区数据的展…

【Python】已解决ModuleNotFoundError: No module named ‘tensorflow‘

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决ModuleNotFoundError: No module named ‘tensorflow‘ 一、分析问题背景 ModuleNotFoundError: No module named ‘tensorflow’ 是一个常见的错误,通常在Pytho…

汽车电子工程师入门系列——汽车操作系统架构学习研究-AUTOSAR

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

chrome.storage.local.set 未生效

之前chrome.storage.local.set 和 get 一直不起作用 使用以下代码运行成功。 chrome.storage.local.set({ pageState: "main" }).then(() > {console.log("Value is set");});chrome.storage.local.get(["pageState"]).then((result) > …

有了文章生成器,轻易满足你对文章的需求

写文章对于大多数人来说并不轻松,往往一篇文章写作完成是需要消耗一个人的大量时间与精力的,如果想要写的文章特别好,那么还要再花一点时间去进入后期的修改。就没有什么方法让大家轻易的去完成文章写作吗?答案是有的,…

将 Cohere 与 Elasticsearch 结合使用

本教程中的说明向你展示了如何使用推理 API 使用 Cohere 计算嵌入并将其存储起来,以便在 Elasticsearch 中进行高效的向量或混合搜索。本教程将使用 Python Elasticsearch 客户端执行操作。 你将学习如何: 使用 Cohere 服务为文本嵌入创建推理端点&…

【python刷题】【深基5.例5】旗鼓相当的对手

题目描述 算法思路 用二维数组data存放成绩数据。双重循环遍历所有的组合,因为自己不能和自己比,所以要注意内层遍历的起始位置。新建一个数组用来得出各个科目的分差,便于代码的书写。由于分差计算出来会出现负数,所以比较的时候…

python办公自动化之pandas

用到的库:pandas 实现效果:创建一张空白的表同时往里面插入准备好的数据 代码: import pandas # 准备好要写入的数据,字典格式 data{日期:[7.2,7.3],产品型号:[ca,ce],成交量:[500,600]} dfpandas.DataFrame(data) # 把数据写入…

学习C语言第一步:300行代码实现输出“Hello World“

学习所有语言的第一步几乎都是在控制台输出"Hello World",C语言也是如此,C语言支持结构化编程、词汇范围和递归等特性,C语言编写的代码在稍作修改或无需修改的情况下可以在多种不同的操作系统和平台上编译和运行,同时运行速度极快。…