赞
踩
pgbench
是 PostgreSQL 数据库的官方性能测试工具,它用于模拟数据库工作负载,执行事务和查询,以评估 PostgreSQL 数据库的性能。pgbench
的主要用途是测量数据库的吞吐量、延迟和并发性能。下面是关于 pgbench
的一些重要信息:
pgbench 主要功能和用途:
默认情况下,pgbench
会测试一种基于 TPC-B 但是要更宽松的场景,其中在每个事务中涉及五个SELECT、UPDATE以及INSERT命令。但是,可以通过编写自己的事务脚本文件很容易用来测试其他情况。测试的目的是了解硬件的处理能力;通过调整参数优化数据库事务处理性能。
新建一个空白数据库,用于测试
postgres=# create database <dbname>;
pgbench -i -U <user> -d <dbname> -h <host>
pgbench -i会创建四个表pgbench_accounts、 pgbench_branches、pgbench_history以及pgbench_tellers,如果同名表已经存在会被先删除。
pgbench=# \dt
List of relations
Schema | Name | Type | Owner
--------+------------------+-------+----------
public | pgbench_accounts | table | postgres
public | pgbench_branches | table | postgres
public | pgbench_history | table | postgres
public | pgbench_tellers | table | postgres
(4 rows)
初始化选项:
Initialization options:
-i invokes initialization mode
-F NUM fill factor
-s NUM scaling factor
--index-tablespace=TABLESPACE
create indexes in the specified tablespace
--tablespace=TABLESPACE
create tables in the specified tablespace
--unlogged-tables
create tables as unlogged tables
-F
: 填充因子,用给定的百分比填充4个表,默认是100。-s
: 比例因子,将生成的行数乘以给定的数,例如,在默认情况下,比例因子为1,pgbench_accounts表会创建100,000行,当-s 100 即会创建10,000,000行。--index-tablespace
: 在给定的表空间而不是默认空间中创建索引。--tablespace
:在指定的表空间而不是默认表空间中创建表。--unlogged-tables
:把所有的表创建为非日志记录表而不是永久表。
-F
和-s
两者都用于控制初始化操作的数据规模,选择使用哪一个取决于测试的需求,但通常来说,-s 更常见。
基准选项:
Benchmarking options: -c NUM number of concurrent database clients (default: 1) -C establish new connection for each transaction -D VARNAME=VALUE define variable for use by custom script -f FILENAME read transaction script from FILENAME -j NUM number of threads (default: 1) -l write transaction times to log file -M simple|extended|prepared protocol for submitting queries to server (default: simple) -n do not run VACUUM before tests -N do not update tables "pgbench_tellers" and "pgbench_branches" -r report average latency per command -S perform SELECT-only transactions -t NUM number of transactions each client runs (default: 10) -T NUM duration of benchmark test in seconds -v vacuum all four standard tables before tests
-c
: 模拟的客户端数量,也就是并发数据库会话数量。默认为 1。-C
:为每一个事务建立一个新连接,而不是只为每个客户端会话建立一个连接。这对于度量连接开销有用。-D
: 为用户自定义脚本传递参数VARNAME=VALUE,可传递多组。-f
: 自定义脚本名称-j
: pgbench中的工作者线程数量。在多 CPU 机器上使用多于一个线程会有用。客户端会尽可能均匀地分布到可用的线程上。默认为 1。-l
:把与每一个事务相关的信息写到一个日志文件中。-M
:要用来提交查询到服务器的协议:-n
:运行性能测试之前不执行 VACUUM 操作。VACUUM 是 PostgreSQL 数据库中的一项维护任务,用于清理和重新组织表中的数据以提高性能。-N
:默认情况下,pgbench 在性能测试期间会更新pgbench_tellers
和 pgbench_branches
这两个表,以模拟数据库的写入操作。然而,有时在性能测试中,您可能希望禁止对这两个表的更新,以更好地模拟只读操作的性能场景,-N正是此作用。-r
:在基准结束后,报告平均的每个命令的每语句等待时间(从客户端的角度来说是执行时间)。-S
:执行内建的只有选择的脚本。是-b select-only简写形式。-t
:每个客户端运行的事务数量。默认为 10。-T
:运行测试这么多秒,而不是为每个客户端运行固定数量的事务。-t和-T是互斥的。-v
:在运行测试前清理所有四个标准的表。在没有用-n
以及-v
时, pgbench将只清理pgbench_tellers 和pgbench_branches表,并且截断pgbench_history。测试示例:
pgbench -i -s 500 -p 5432 -U postgres -d postgres // 初始化,放大倍数500
pgbench -c 256 -j 10 -M extended -n -T 600 -r -h 10.229.89.212 -p 5678 -U postgres -d postgres
// 256 客户端连接, 每个客户端 10个线程, extended查询协议,不清理, 运行时间 600s,报告用时
pgbench -c 256 -j 10 -M extended -v -t 10000 -r -h 10.229.89.212 -p 5678 -U postgres
-d postgres
// 256 客户端连接, 每个客户端 10个线程, extended查询协议,清理,运行事务数 10000,报告用时
// -T 与 -t 互斥
[root@bolin-postgresql ~]# pgbench -c 10 -j 2 -M extended -v -t 100 -r -h localhost -U postgres -d pgbench transaction type: TPC-B (sort of) scaling factor: 1 query mode: extended number of clients: 10 number of threads: 2 number of transactions per client: 100 number of transactions actually processed: 1000/1000 tps = 45.268234 (including connections establishing) tps = 45.289643 (excluding connections establishing) statement latencies in milliseconds: 7.734936 \set nbranches 1 * :scale 0.008262 \set ntellers 10 * :scale 6.142559 \set naccounts 100000 * :scale 6.582939 \setrandom aid 1 :naccounts 0.006482 \setrandom bid 1 :nbranches 0.006836 \setrandom tid 1 :ntellers 0.006862 \setrandom delta -5000 5000 0.110211 BEGIN; 0.179985 UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid; 0.115581 SELECT abalance FROM pgbench_accounts WHERE aid = :aid; 72.071510 UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid; 125.667481 UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid; 0.165142 INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP); 1.431625 END;
transaction type
: TPC-B (sort of):事务类型。这里指明测试使用了 TPC-B 类似的事务,表明测试是模拟了一种类似于 TPC-B 基准测试的工作负载。scaling factor
: 1:比例因子。这是数据库规模的指标,通常用于模拟数据库的大小。1 表示数据库规模是原始大小,没有扩展。query mode: extended
:查询模式。这是指 pgbench 使用的查询模式,这里是扩展查询模式,表示测试中包含了较复杂的查询。number of clients
: 10:客户端数量。测试中模拟的并发客户端数量,即同时连接到数据库的客户端数。number of threads
: 2:线程数量。每个客户端使用的线程数量,这里是每个客户端使用 2 个线程。number of transactions per client
: 100:每个客户端执行的事务数。每个客户端模拟执行的事务数量。number of transactions actually processed
: 1000/1000:实际处理的事务数量。这表示测试成功执行了 1000 个事务,与预期的 1000 个事务相符。tps = 45.268234 (including connections establishing)
:每秒事务数(TPS),包括连接建立。这是测试期间数据库处理的平均事务数量,包括连接建立的时间。在这个数据中,每秒完成了大约 45.27 个事务。tps = 45.289643 (excluding connections establishing)
:每秒事务数(TPS),不包括连接建立。这是测试期间数据库处理的平均事务数量,不包括连接建立的时间。在这个数据中,每秒完成了大约 45.29 个事务。statement latencies in millisecond
s: 查询语句的延迟时间(以毫秒为单位)。这部分提供了每个查询语句的平均执行时间,以便您了解查询的性能情况。每个查询语句都有其自己的执行时间。总之,这份报告提供了有关 PostgreSQL 数据库性能的一些关键指标,包括吞吐量(每秒事务数)、查询模式、查询语句延迟时间等信息。通过分析这些数据,您可以更好地了解数据库的性能表现,以便进行优化和改进。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。