pgbench-i [ other-options ] dbname
主要选项
-i:初始化模式
-s 插入的倍数,默认是1,即插入100000条;也就是执行多少次generate_series(1,100000)
-I init_steps,默认dtgvp
d (drop)
t(create tables)
g or G (插入数据方式)
v (vacuum)
p (create primary key)
f (create foreign key)
pgbench [ options ] dbname
重要选项:
-c(客户端数量)
-t(事务数量)
-T(时间限制)
-j(工作者线程数量)
-f(指定一个自定义脚本文件)
pgbench -i -s 10 -d mydb
创建四个表,如果同名表已经存在会被先删除
pgbench_accounts#账户表
pgbench_branches#支行表
pgbench_history#历史信息表
pgbench_tellers#出纳表
在默认的情况下-s"比例因子"为1,这些表初始包含的行数为:
pgbench_branches 1
pgbench_tellers 10
pgbench_accounts 100000
pgbench_history 0
mydb=# \d 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) mydb=# select count(*) from pgbench_accounts; count --------- 1000000 (1 row) mydb=# select count(*) from pgbench_branches; count ------- 10 (1 row) mydb=# select count(*) from pgbench_history; count ------- 0 (1 row) mydb=# select count(*) from pgbench_tellers; count ------- 100 (1 row)
复制
-f 指定脚本
-P 1 每秒打印结果
pgbench -T 60 -c 30 -j 2 mydb -P 1 -f pg.sql starting vacuum...end. progress: 1.0 s, 0.0 tps, lat 0.000 ms stddev 0.000 progress: 2.0 s, 0.0 tps, lat 0.000 ms stddev 0.000 progress: 3.0 s, 0.0 tps, lat 0.000 ms stddev 0.000 progress: 4.0 s, 0.0 tps, lat 0.000 ms stddev 0.000 progress: 5.0 s, 0.0 tps, lat 0.000 ms stddev 0.000 progress: 6.0 s, 0.0 tps, lat 0.000 ms stddev 0.000 progress: 7.0 s, 8.0 tps, lat 6854.283 ms stddev 81.711 progress: 8.0 s, 22.0 tps, lat 7150.194 ms stddev 123.940 progress: 9.0 s, 0.0 tps, lat 0.000 ms stddev 0.000 progress: 10.0 s, 0.0 tps, lat 0.000 ms stddev 0.000
复制
[postgres@VM-20-8-centos ~]$ pgbench -b list Available builtin scripts: tpcb-like simple-update select-only
复制
内建事务脚本
BEGIN; --1 UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid; --2 SELECT abalance FROM pgbench_accounts WHERE aid = :aid; --3 UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid; --4 UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid; --5 INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP); END; 如果选择simple-update内建脚本(选项-N),第3和4步不会被包括在事务中。 如果选择select-only内建脚本(选项-S),只会发出SELECT。
复制
create database pgbenchdb
pgbench -i -s 5 pgbenchdb --初始化,将在pgbench_accounts表中创建500,000行。
pgbench -r -j2-c4 -t60 pgbenchdb
–基准测试1,并行工作线程数2,客户端数量4,每客户端事务数60
pgbench -r -j2-c10 -T10 pgbenchdb
–基准测试2,并行工作线程数2,客户端数量10,运行时间1分钟
-r 在基准结束后,报告平均的每个命令的每语句等待时间(从客户端的角度来说是执行时间)。
-j pgbench中的工作者线程数量。在多CPU 机器上使用多于一个线程会有用。客户端会尽可能均匀地分布到可用的线程上。默认为1。
-c 模拟的客户端数量,也就是并发数据库会话数量。默认为1。
-t 每个客户端运行的事务数量。默认为10。
-T 运行测试这么多秒,而不是为每个客户端运行固定数量的事务。
注意:-t和-T是互斥的。