pgbench
-b
scriptname[@weight]
--builtin
=scriptname[@weight]
把指定的内建脚本加入到要执行的脚本列表中。@
之后是一个可选的整数权重,它允许调节抽取该脚本的可能性。如果没有指定,它会被设置为 1。可用的内建脚本有:tpcb-like
、simple-update
和select-only
。这里也接受内建名称无歧义的前缀缩写。如果用上特殊的名字list
,将会显示内建脚本的列表并且立刻退出。
-c
clients
--client=
clients
模拟的客户端数量,也就是并发数据库会话数量。默认为 1。
-C
--connect
为每一个事务建立一个新连接,而不是只为每个客户端会话建立一个连接。这对于度量连接开销有用。
-d
--debug
打印调试输出。
-D
varname
=
value
--define=
varname
=
value
定义一个由自定义脚本(见下文)使用的变量。允许多个-D
选项。
-f
filename[@weight]
--file=
filename[@weight]
把一个从filename
读到的事务脚本加入到被执行的脚本列表中。@
后面是一个可选的整数权重,它允许调节抽取该测试的可能性。详见下文。
-j
threads
--jobs=
threads
pgbench中的工作者线程数量。在多 CPU 机器上使用多于一个线程会有用。客户端会尽可能均匀地分布到可用的线程上。默认为 1。
-l
--log
把每一个事务的信息写到一个日志文件中。详见下文。
-L
limit
--latency-limit=
limit
对持续超过limit
毫秒的事务进行独立的计数和报告,
这些事务被认为是迟到(late)了的事务。
在使用限流措施时(--rate=...
),滞后于计划超过
limit
毫秒并且因此没有希望满足延迟限制的事务根本
不会被发送给服务器。这些事务被认为是被跳过(skipped)
的事务,它们会被单独计数并且报告。
-M
querymode
--protocol=
querymode
要用来提交查询到服务器的协议:
-
simple
:使用简单查询协议。 -
extended
使用扩展查询协议。 -
prepared
:使用带预备语句的扩展查询语句。
默认是简单查询协议(详见第 52 章)。
-n
--no-vacuum
在运行测试前不进行清理。如果你在运行一个不包括标准的表pgbench_accounts
、
pgbench_branches
、pgbench_history
和
pgbench_tellers
的自定义测试场景时,这个选项是必需的。
-N
--skip-some-updates
运行内建的简单更新脚本。这是-b simple-update
的简写。
-P
sec
--progress=
sec
每sec
秒显示进度报告。该报告包括运行了多长时间、从上次报告以来的 tps 以及从上次报告以来事务延迟的平均值和标准偏差。如果低于限流值(-R
),延迟会相对于事务预定的开始时间(而不是实际的事务开始时间)计算,因此其中也包括了平均调度延迟时间。
-r
--report-latencies
在基准结束后,报告平均的每个命令的每语句等待时间(从客户端的角度来说是执行时间)。详见下文。
-R
rate
--rate=
rate
按照指定的速率执行事务而不是尽可能快地执行(默认行为)。该速率 以 tps(每秒事务数)形式给定。如果目标速率高于最大可能速率,则 该速率限制不会影响结果。
该速率的目标是按照一条泊松分布的调度时间线开始事务。期望的开始 时间表会基于客户端第一次开始的时间(而不是上一个事务结束的时 间)前移。这种方法意味着当事务超过它们的原定结束时间时,更迟的 那些有机会再次追赶上来。
当限流措施被激活时,运行结束时报告的事务延迟是从预订的开始时间计 算而来的,因此它包括每一个事务不得不等待前一个事务结束所花的时 间。该等待时间被称作调度延迟时间,并且它的平均值和最大值也会被 单独报告。关于实际事务开始时间的事务延迟(即在数据库中执行事务 所花的时间)可以用报告的延迟减去调度延迟时间计算得到。
如果把--latency-limit
和--rate
一起使用,
当一个事务在前一个事务结束时已经超过了延迟限制时,它可能会滞后
非常多,因为延迟是从计划的开始时间计算得来。这类事务不会被发送
给服务器,而是一起被跳过并且被单独计数。
一个高的调度延迟时间表示系统无法用选定的客户端和线程数按照指定 的速率处理事务。当平均的事务执行时间超过每个事务之间的调度间隔 时,每一个后续事务将会落后更多,并且随着测试运行时间越长,调度 延迟时间将持续增加。发生这种情况时,你将不得不降低指定的事务速率。
-s
scale_factor
--scale=
scale_factor
在pgbench的输出中报告指定的比例因子。对于内建测试,这并非必需;正确的比例因子将通过对pgbench_branches
表中的行计数来检测。不过,当只测试自定义基准(-f
选项)时,比例因子将被报告为 1(除非使用了这个选项)。
-S
--select-only
执行内建的只有选择的脚本。是-b select-only
简写形式。
-t
transactions
--transactions=
transactions
每个客户端运行的事务数量。默认为 10。
-T
seconds
--time=
seconds
运行测试这么多秒,而不是为每个客户端运行固定数量的事务。-t
和-T
是互斥的。
-v
--vacuum-all
在运行测试前清理所有四个标准的表。在没有用-n
以及-v
时,
pgbench将清理pgbench_tellers
和pgbench_branches
表,并且截断pgbench_history
。
--aggregate-interval=seconds
聚集区间的长度(以秒计)。可以只与-l
选项一起使用。
通过这个选项,日志会包含每个区间的总结,如下所述。
--log-prefix=prefix
为由--log
创建的日志文件设置文件名前缀。
默认值是pgbench_log
。
--progress-timestamp
当显示进度(选项-P
)时,使用一个时间戳(Unix 时间)取代从运行开始的秒数。单位是秒,在小数点后是毫秒精度。这可以有助于比较多种工具生成的日志。
--sampling-rate=rate
采样率,在写入数据到日志时被用来减少日志产生的数量。如果给出这个选项,只有指定比例的事务被记录。1.0 表示所有事务都将被记录,0.05 表示只有 5% 的事务会被记录。
在处理日志文件时,记得要考虑这个采样率。例如,当计算 tps 值时,你需要相应地乘以这个数字(例如,采样率是 0.01,你将只能得到实际 tps 的 1/100)。
推荐阅读