[转帖]pgbench(postgresql压力测试工具)

pgbench,postgresql,压力,测试工具 · 浏览次数 : 0

小编点评

# Client Count and Performance Parameters This document explains the relationship between client count, performance parameters, and the pgbench command line tool. ### Client Count The client count parameter specifies the number of threads to launch for processing transactions. The default value is 1, indicating that only one thread will be used. Increasing the client count will increase the number of threads but may also impact performance. ### Performance Parameters Several performance parameters can be set using the `-p` flag: * `-s scale_factor`: This parameter controls the number of threads allocated for each transaction. It is used alongside `-t` to specify the number of transactions per second. * `-t` and `-T`: These parameters specify the number of threads and the duration of the test, respectively. * `-v` flag triggers vacuum for the specified database tables before testing. ### Transaction Flow The `pgbench` command follows a specific transaction flow: 1. BEGIN transaction. 2. Update `pgbench_accounts` and `pgbench_tellers` tables with transaction data. 3. Update `pgbench_branches` table with branch data. 4. Insert historical data into `pgbench_history` table. 5. Execute the provided transaction script. ### Sampling Rate The `-s` flag can be used to specify the sampling rate for logging. By default, all transactions are recorded (0.05), but only a subset (0.01 in this case) is logged (0.05). ### Conclusion Understanding client count, performance parameters, and the specific order of actions within the `pgbench` command is crucial for achieving efficient and accurate test results.

正文

pgbench

名称

pgbench -- 在PostgreSQL中执行基准线测试

大纲

pgbench -i [option...] [dbname]

pgbench [option...] [dbname]

 

描述

      pgbench是一个用于在PostgreSQL数据库中运行基准测试的简单程序。pgbench在多个并发的数据库会话中反复运行一系列相同的SQL命令,并计算事务执行的平均速率(每秒执行的事务个数)。 pgbench默认测试的是一种基于TPC-B的松散的测试,即一个事务中包括5个SELECT,UPDATE和INSERT语句。同时允许基于开发者自己书写的事务脚本文件进行其他场景的测试。

      典型的pgbench输出如下:

transactiontype: TPC-B (sort of)
scaling factor: 10
query mode: simple
number of clients: 10
number of threads: 1
number of transactions per client: 1000
number of transactions actually processed: 10000/10000
tps = 85.184871 (including connections establishing)
tps = 85.296346 (excluding connections establishing)

      前六行显示了一些非常重要的参数。接下来显示的是已经完成的事务和预计应该执行的事务个数。这两个数值应该是相等的,如果不相等说明存在执行失败的情况(如果指定为-T模式,则只打印实际完成的事务数量)。最后两行tps显示的是每秒完成的事务数量(包含连接建立时间和不包含连接建立时间分别计算出的平均值)。

      默认的TPC-B-like事务测试需要预先设置特定的表。pgbench调用-i(初始化)选项来创建和填充这些表。在使用一个定制化脚本测试时,不需要调用-i选项初始化,但是需要对这个定制化脚本需要的表进行初始化。初始化过程类似如下:

pgbench -i [ other-options ] dbname

dbname用于指定一个可以用来测试的数据库的数据库名称。你可能需要指定-h,-p,-U等参数来连接数据库服务器

选项

      下面的选项分成三个不同类别,分别是使用在数据库初始化阶段,基准测试运行阶段或两个阶段都可以使用。

初始化选项

      pgbench接受以下命令行参数:

-i

--initialize

调用初始化模式.

-F fillfactor

--fillfactor=fillfactor

使用给出的填充因子创建pgbench_accounts,pgbench_tellers,pgbench_branches等表.默认值是100.

-n

--no-vacuum

初始化后不执行vacuum。

-q

--quiet

日志模式切换为静默方式。即每五秒只打印一条进度信息,默认是每10万条记录打印一条日志,这样通常会有很多日志产生。

-s scale_factor

--scale=scale_factor

生成的行数乘以比例因子。比如,-s 100会在pgbench_accounts表中将会生成1000万条记录。默认值是1。当指定的参数超过20000时,为了能够容纳账户标识符的范围,保存这些信息的列字段类型会调整为大整形。

--foreign-keys

在默认创建的表上创建外键。

--index-tablespace=index_tablespace

在指定的表空间上创建索引。

--tablespace=tablespace

在指定的表空间上创建默认表。

--unlogged-tables

Create all tables as unlogged tables, rather thanpermanent tables.(创建临时表?)

基准测试选项

      pgbench接受以下命令行基准测试参数参数:

-c clients

--client=clients

模拟的客户数量,具体指并发运行的数据库会话数。默认值为1。

-C

--connect

每个事务都新创建一个连接来执行,而不是仅使用一个客户端连接。这个对于测试连接过载是有意义的。

-d

--debug

打印调试信息

-D varname=value

--define=varname=value

定义一个客户定制脚本适用的变量。允许多个-D选项。

-f filename

--file=filename

从指定文件中读取事务脚本。具体参见下面的详细介绍。-N, -S和-f是互斥的。

-j threads

--jobs=threads

指定工作线程数量。在多核场景下使用多于一个线程是有意义的。由于每个线程会被分配相同数量的客户端数目,所以客户端数量必须设置为线程数目的整数倍。该参数默认值为1。

-l

--log

记录每个线程的耗时到日志文件中。详细内容见下文。

-M querymode

--protocol=querymode

用于向服务器提交查询的协议:

  • simple: 使用简单协议.
  • extended: 使用扩展协议.
  • prepared: 使用扩展协议with prepared statements.

默认值为简单协议. (详细说明参考Chapter 49 。)

-n

--no-vacuum

测试运行前不执行vacuum。如果运行的是一个不包含默认表( pgbench_accounts, pgbench_branches, pgbench_history和pgbench_tellers.

)的定制测试时,这个选项是必要的。

-N

--skip-some-updates

不更新表pgbench_tellers和pgbench_branches.设置后会避免更新着两个表。但是这样返会使该测试与TPC-B测试产生差异。

-P sec

--progress=sec

每秒显示一次进度报告。报告包括已运行时间,上次报告到当前的tps、事务延迟时间、标准误差。节流(-R)模式下,误差是从事务计划开始时间计算,而不是实际的事务开始时间,因此,这个时间还包含了平均执行计划延迟时间。

-r

--report-latencies

基准测试运行完成后报告每个命令的平均延迟时间(从客户角度看到的执行时间)。详细内容见下文。

-R rate

--rate=rate

按执行速率执行事务,而不是尽可能快的运行(默认方式)。这个速率指定的是每秒的事务数。如果指定的速率比最大可能速率还大,则这个速率参数不会对结果产生影响。

速率以沿着Poisson-distributed计划时间线开始的事务为目标。期待的开始时间基于客户第一次启动时间向前,而不是最后一个事务的完成时间。这种方法意味着当事务经过了原先的计划结束时间,后续的事务仍然有可能赶上

The rate is targeted by starting transactions along aPoisson-distributed schedule time line. The expected start time schedule movesforward based on when the client first started, not when the previoustransaction ended. That approach means that when transactions go past theiroriginal scheduled end time, it is possible for later ones to catch up again.

当节流开关是有效的,则运行结束时报告的事务时延是从计划开始时间计算的,因此这个时间是包含了每个事务等待前一个事务完成的这段时间的。等待时间又称为计划延迟时间,并且它的平均时间和最大时间也会被分别输出。因此基于实际事务开始时间的事务时延,也就是,在数据库中执行事务实际花费的时间,可以用减去时延报告中的计划延迟时间来计算。

一个高的计划延迟时间表明系统无法以指定的速率、客户端数量和线程数来处理事务。当平均事务执行时间比事务执行间隔时间要长时,每个连续的事务将会下跌,测试的时间越长,计划延迟时间将会持续越长。当这些事情发生时,你需要降低定制的事务速率。

-s scale_factor

--scale=scale_factor

在pgbench报告中输出定制的比例因子。内置测试不需要设置这个参数。通过计算在pgbench_branches表中的行数,正确的比例因子将会被检测到。但是,如果通过-f运行客户定制的基准测试,比例因子会被报告为1,除非使用了这个参数。

-S

--select-only

运行select-only事务测试而不是TPC-B-like测试。

-t transactions

--transactions=transactions

每个客户端运行的事务数量,默认值为10.

-T seconds

--time=seconds

运行测试这么多秒,而不是每个客户端运行固定数量的事务。-t - t是互相排斥的。

-v

--vacuum-all

运行测试前先对四张基准表做vacuum。如果不指定-n也不执行-v,默认对表pgbench_tellers和pgbench_branches做vacuum并将pgbench_history表truncate掉。

--aggregate-interval=seconds

汇总时间间隔长度。只有-l和这个参数同时使用才有效。日志包含每个间隔的概要(事务数量,最大最小时延和两个额外的用于方差估计的字段)

--sampling-rate=rate

抽样速率,将数据写入日志时使用,用于降低生产的日志数量。如果设置了这个参数,只有指定的事务部分才会被记录。1.0表示所有事务都被记录。0.05表示只有5%的事务会被记录。当处理日志文件时记得考虑采样率。例如,当计算tps值,你需要乘上对应的数量(比如0.01采样率,你实际只是获得了1/100的实际tps)。

通用参数

      pgbench接受以下命令行常见参数:

-h hostname

--host=hostname

数据库服务器主机名称

-p port

--port=port

数据库服务器端口号

-U login

--username=login

用来登陆的数据库用户名称

-V

--version

打印pgbench版本

-?

--help

显示pgbench命令帮助信息

说明

pgbench中运行的所谓的“事务”是什么?

      默认的事务脚本在每个事务中执行如下七条语句:

  1. BEGIN;
  1. UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;
  1. SELECT abalance FROM pgbench_accounts WHERE aid = :aid;
  1. UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid;
  2. UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid;
  3. INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);
  4. END;

      如果你指定了-N,第4步和第5步不会执行。如果指定了-S,则只有select语句会执行。

 

部分示例:

1.初始化:

  pgbench -i pgbench 

  如果端口号有变化,需要先手动创建数据库,再执行。

  pgbench -i -s 10 -p 5433 pgbench

 

 重点:主要用到两个参数,-i:初始化模式,-s 插入的倍数,默认是1,即插入100000条;也就是执行多少次generate_series(1,100000)。

2.测试 :

pgbench  -T 20 -c 1000 -j 5 -r pgbench -p 5432 -U pgsql 

文章知识点与官方知识档案匹配,可进一步学习相关知识
PostgreSQL技能树首页概览4515 人正在系统学习中

与[转帖]pgbench(postgresql压力测试工具)相似的内容:

[转帖]pgbench(postgresql压力测试工具)

pgbench 名称 pgbench -- 在PostgreSQL中执行基准线测试 大纲 pgbench -i [option...] [dbname] pgbench [option...] [dbname] 描述 pgbench是一个用于在PostgreSQL数据库中运行基准测试的简单程序。pg

[转帖]PostgreSQL 压测工具pgbench

1.命令 pgbench --help pgbench is a benchmarking tool for PostgreSQL. Usage: pgbench [OPTION]... [DBNAME] Initialization options: -i, --initialize invoke

[转帖]pgbench 使用介绍及示例

pgbench 使用介绍及示例 https://www.cnblogs.com/cqdba/ 1.pgbench概要 pgbench是一种在PostgreSQL上运行基准测试的简单程序, 它是pg自带的工具; 它可能在并发的数据库会话中一遍一遍地运行相同序列的 SQL 命令,并且计算平均事务率(每秒

[转帖]

Linux ubuntu20.04 网络配置(图文教程) 因为我是刚装好的最小系统,所以很多东西都没有,在开始配置之前需要做下准备 环境准备 系统:ubuntu20.04网卡:双网卡 网卡一:供连接互联网使用网卡二:供连接内网使用(看情况,如果一张网卡足够,没必要做第二张网卡) 工具: net-to

[转帖]

https://cloud.tencent.com/developer/article/2168105?areaSource=104001.13&traceId=zcVNsKTUApF9rNJSkcCbB 前言 Redis作为高性能的内存数据库,在大数据量的情况下也会遇到性能瓶颈,日常开发中只有时刻

[转帖]ISV 、OSV、 SIG 概念

ISV 、OSV、 SIG 概念 2022-10-14 12:29530原创大杂烩 本文链接:https://www.cndba.cn/dave/article/108699 1. ISV: Independent Software Vendors “独立软件开发商”,特指专门从事软件的开发、生产、

[转帖]Redis 7 参数 修改 说明

2022-06-16 14:491800原创Redis 本文链接:https://www.cndba.cn/dave/article/108066 在之前的博客我们介绍了Redis 7 的安装和配置,如下: Linux 7.8 平台 Redis 7 安装并配置开机自启动 操作手册https://ww

[转帖]HTTPS中间人攻击原理

https://www.zhihu.com/people/bei-ji-85/posts 背景 前一段时间,公司北京地区上线了一个HTTPS防火墙,用来监听HTTPS流量。防火墙上线之前,邮件通知给管理层,我从我老大那里听说这个事情的时候,说这个有风险,然后意外地发现,很多人原来都不知道HTTPS防

[转帖]关于字节序(大小端)的一点想法

https://www.zhihu.com/people/bei-ji-85/posts 今天在一个技术群里有人问起来了,当时有一些讨论(不完全都是我个人的观点),整理一下: 为什么网络字节序(多数情况下)是大端? 早年设备的缓存很小,先接收高字节能快速的判断报文信息:包长度(需要准备多大缓存)、地

[转帖]awk提取某一行某一列的数据

https://www.jianshu.com/p/dbcb7fe2da56 1、提取文件中第1列数据 awk '{print $1}' filename > out.txt 2、提取前2列的文件 awk `{print $1,$2}' filename > out.txt 3、打印完第一列,然后打