首页 > 其他分享 >[postgres]使用pgbench进行基准测试

[postgres]使用pgbench进行基准测试

时间:2024-08-31 17:53:11浏览次数:11  
标签:事务 pgbench postgres -- 基准 默认 NUM 测试

前言

pgbench是一种在postgres上进行基准测试的简单程序,一般安装后就会自带。pgbench可以再并发的数据库绘画中一遍遍地进行相同序列的SQL语句,并且计算平均事务率。

测试准备

既然要测postgres,肯定要先有个postgres。安装过程略过。

一些环境信息:

  • postgres版本:15.3,安装完成后默认配置
  • os version:debian 12
  • 硬件配置:vbox虚拟机,4核4GB内存,40GB SSD存储

pgbench选项

运行pgbench --help查看帮助文档

pgbench is a benchmarking tool for PostgreSQL.

Usage:
  pgbench [OPTION]... [DBNAME]

Initialization options:
  -i, --initialize         调用初始化模式
  -I, --init-steps=[dtgGvpf]+ (default "dtgvp")
                           运行选定的初始化步骤
  -F, --fillfactor=NUM     设置填充因子
  -n, --no-vacuum          初始化期间不运行 VACUUM
  -q, --quiet              安静日志记录(每 5 秒一条消息)
  -s, --scale=NUM          缩放因子
  --foreign-keys           在表之间创建外键约束
  --index-tablespace=TABLESPACE
                           在指定的表空间中创建索引
  --partition-method=(range|hash)
                           使用此方法对 pgbench_accounts 进行分区(默认:range)
  --partitions=NUM         将 pgbench_accounts 分成 NUM 个部分(默认:0)
  --tablespace=TABLESPACE  在指定的表空间中创建表
  --unlogged-tables        将表创建为非记录表

Options to select what to run:
  -b, --builtin=NAME[@W]   添加内置脚本 NAME,权重为 W(默认:1)
                           (使用 "-b list" 列出可用脚本)
  -f, --file=FILENAME[@W]  添加脚本 FILENAME,权重为 W(默认:1)
  -N, --skip-some-updates  跳过 pgbench_tellers 和 pgbench_branches 的更新
                           (与 "-b simple-update" 相同)
  -S, --select-only        仅执行 SELECT 类型事务
                           (与 "-b select-only" 相同)

Benchmarking options:
  -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-per-command 每个命令报告延迟、失败和重试
  -R, --rate=NUM           目标事务每秒速率
  -s, --scale=NUM          在输出中报告此缩放因子
  -t, --transactions=NUM   每个客户端运行的事务数(默认:10)
  -T, --time=NUM           基准测试持续时间(秒)
  -v, --vacuum-all         测试前清理所有四个标准表
  --aggregate-interval=NUM 将数据汇总在 NUM 秒内
  --failures-detailed      按基本类型分组报告失败情况
  --log-prefix=PREFIX      事务时间日志文件的前缀
                           (默认:"pgbench_log")
  --max-tries=NUM          运行事务的最大尝试次数(默认:1)
  --progress-timestamp     使用 Unix 纪元时间戳作为进度
  --random-seed=SEED       设置随机种子("time", "rand", 整数)
  --sampling-rate=NUM      日志记录的事务比例(例如,0.01 代表 1%)
  --show-script=NAME       显示内置脚本代码,然后退出
  --verbose-errors         打印所有错误的消息

Common options:
  -d, --debug              打印调试输出
  -h, --host=HOSTNAME      数据库服务器主机或套接字目录
  -p, --port=PORT          数据库服务器端口号
  -U, --username=USERNAME  以指定的数据库用户身份连接
  -V, --version            输出版本信息,然后退出
  -?, --help               显示此帮助信息,然后退出

Report bugs to <[email protected]>.
PostgreSQL home page: <https://www.postgresql.org/>

测试示例

  1. 初始化测试数据。以下命令会自动创建四张测试表,在其中一个表pgbench_accounts中创建200000行数据。再次初始化的话,pgbench会先把旧表删除,然后再建测试表。
pgbench -i -s 2
  1. 使用默认配置执行一次简单的基准测试
$ pgbench

pgbench (15.3)
starting vacuum...end.
transaction type: <builtin: TPC-B (sort of)>  # 本次测试所使用的测试类型
scaling factor: 2  # 用于记录在初始化设置的数据量比例因子
query mode: simple  # 测试是指定的查询类型
number of clients: 1  # 客户端数量
number of threads: 1  # 每个客户端的线程数
maximum number of tries: 1
number of transactions per client: 10  # 每个客户端的事务数
number of transactions actually processed: 10/10  # 实际完成的事务数量和计划完成的事务数量
number of failed transactions: 0 (0.000%)
latency average = 7.501 ms  # 平均响应时间
initial connection time = 1.650 ms
tps = 133.317335 (without initial connection time)

删除测试数据

DROP TABLE IF EXISTS pgbench_accounts;
DROP TABLE IF EXISTS pgbench_branches;
DROP TABLE IF EXISTS pgbench_history;
DROP TABLE IF EXISTS pgbench_tellers;

测试数据

500w数据量,postgres为默认配置

序号 测试命令 平均响应时间 TPS 总事务数
1 pgbench -T60 6.857 ms 145.833890 8750
2 pgbench -j2 -c4 -T60 11.505 ms 347.677286 20858
3 pgbench -j4 -c8 -T60 13.721 ms 583.052560 34987

标签:事务,pgbench,postgres,--,基准,默认,NUM,测试
From: https://www.cnblogs.com/XY-Heruo/p/18390542

相关文章

  • AMD在新的MLPerf基准测试中缩小了与Nvidia的差距
    AMD、UntetherAI、Google、Intel和Nvidia的新基准测试结果显示,AI硅片性能竞争日趋激烈。然而,系统设计、网络和软件使AI大放异彩,而这正是Nvidia的强项。终于,我可以停止抱怨AMD缺乏公开的AI基准测试了。AMD发布了其MI300GPU的优秀MLPerf推理结果,虽然只在一个基准测试上与Nvidi......
  • postgresql下Schema和DataBase
    database—>schema—>table1.同一个实例下,不同database是不能相互访问的,即独立的。2.同一个数据库,不同模式下的表是可以相互访问,即可共享的3.不同模式下,表名可以是一样。也就是表在模式下是独立。##授权某个库下的某个模式下有创建表的权限grantcreateondatabasedb_na......
  • postgresql 断电后无法重启问题
    问题描述LOG:databasesystemwasinterrupted;lastknownupat2024-07-0405:03:31UTCFATAL:thedatabasesystemisstartingup解决办法PostgreSQL9.6及以下版本使用pg_resetxlog,高于9.6使用pg_resetwalps:这边数据版本为12.3步骤:先把数据库发布订阅停止......
  • Qt5.14.2 操作PostgreSQL 记录
    在Qt5.14.2中操作PostgreSQL数据库.#include<QSqlDatabase>#include<QSqlQuery>#include<QSqlError>#include<QDebug>//初始化数据库连接QSqlDatabasedb=QSqlDatabase::addDatabase("QPSQL");//qDebug()<<"aaaa"......
  • PostgreSQL基础
    1.数据类型1.4布尔类型bool1.5网络地址类型cidr:对ip和子网掩码合法性做校验,输出时会带子网掩码inet:对ip做校验,输出时有可能带子网掩码macaddr和macaddr8:MAC地址1.5.1操作符1.5.2函数host:取ip地址SELECThost(cidr'192.168.2.0/24')text:取ip和子网掩码SE......
  • 如何考取PostgreSQL认证证书?
    PostgreSQL数据库炙手可热,国内知名的腾讯云TDSQL、阿里云PolarDB都有PostgreSQL版本的产品,还有人大金仓、华为opengauss、翰高数据库等都跟PostgreSQL有关系,所以考一个PostgreSQL认证非常有必要。要获得PostgreSQL认证,可以从以下几个方面着手:一、了解PostgreSQL认证体系PostgreS......
  • JuiceFS元数据引擎PostgreSQL
    使用PostgreSQL作为JuiceFS元数据引擎,各表的含义和字段做一个简单归纳juicefs数据库用于存储juicefs文件信息postgres=#\lListofdatabasesName|Owner|Encoding|LocaleProvider|Collate|......
  • PostgreSQL:后端开发者的瑞士军刀
    PostgreSQL:后端开发者的瑞士军刀在后端开发的世界中,PostgreSQL不仅是一个数据库,它更像是一个多功能的瑞士军刀,为开发者提供了强大的工具来构建和维护复杂的数据系统。作为一名资深后端开发者,我想分享一些关于PostgreSQL的见解和技巧,这些经验来自于我在多个项目中的实际应用......
  • 【0316】Postgres内核之VACUUM (FULL)运行 portal multi query (11)
    上一篇文章:【0315】Postgres内核之VACUUM(FULL)运行portalquery(10)1.执行portalmultiquery在【0315】Postgres内核之VACUUM(FULL)运行portalquery(10)一文中讲解了Postgres内核运行portal查询的实现。之后通过判断portal->strategy的值(PORTAL_MULTI_QUERY)走到了Po......
  • CREO导入外部模型没有基准平面如何处理
    导入外部模型后需要插入基准面,然后在模型上添加平面摆正模型1、首先导入外部模型2、然后,点击坐标符号位置,点击在此插入3、点击创建基准平面4、约束模型与基准面相对位置关系,即可摆正模型,进行设计 ......