postgreSQL基准测试

postgreSQL pgbench

初始化

# 初始化测试数据
./pgbench -i -s  80 -h 192.168.1.253 -p 5432 -U postgres -d  dzzh_db_copy

pgbench内置脚本

查看内置测试脚本

./pgbench -b list

tpcb-like

# 包含select、update、insert的事物
BEGIN;
UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;
SELECT abalance FROM pgbench_accounts WHERE aid = :aid;
UPDATE pgbench_tellers SET bbalance = tbalance + :delta WHERE tid = :tid;
UPDATE pgbench_branches SET bbalance bbalance + :delta WHERE bid = :bid;
INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid,:aid,:delta,CURRENT_TIMESTAMP);
END;

simple-update

BEGIN;
UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;
SELECT abalance FROM pgbench_accounts WHERE aid = :aid;
INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid,:aid,:delta,CURRENT_TIMESTAMP);
END;

select-only

BEGIN;
SELECT abalance FROM pgbench_accounts WHERE aid = :aid;
END;
# 使用simple-update测试
./pgbench -b simple-update -h 192.168.1.253 -p 5432 -U postgres -d dzzh_db_copy
# 3种内置脚本混合进行测试
./pgbench -b simple-update@2 -b select-only@8 -b tpcb@0 -h 192.168.1.253 -p 5432 -U postgres -d dzzh_db_copy

使用自定义脚本

# 创建表
create table tbl
(
  id serial primary key,
  ival int
);

# 写入sql脚本
echo "select id,ival from tbl order by id desc limit 10;" > bench_script_for_select.sql

# 执行脚本
./pgbench -f /usr/data/sql/bench_script_for_select.sql -h 192.168.1.253 -p 5432 -U postgres -d dzzh_db_copy
vim bench_script_for_insert.sql

\sleep 500ms
\set ival random(1,100000)
insert into tbl(ival) values(:ival);


./pgbench -f /usr/data/sql/bench_script_for_insert.sql -h 192.168.1.253 -p 5432 -U postgres -d dzzh_db_copy 

select count(*) from tbl;


./pgbench -T 60 -f /usr/data/sql/bench_script_for_insert.sql@10 -f /usr/data/sql/bench_script_for_insert.sql@3 -h 192.168.1.253 -p 5432 -U postgres -d dzzh_db_copy

其他选项

模拟客户端数量和连接方式

-c 模拟客户端连接数(并发)

指定模拟客户端的数量,也就是并发数据库的连接数量,默认值为1。用于测试连接池性能。

# 模拟4个客户端连接
./pgbench -c 4 -h 192.168.1.253 -p 5432 -U postgres -d dzzh_db_copy 

# 模拟4个客户端连接,每个事物创建新的连接 -C
./pgbench -c 4 -C  -h 192.168.1.253 -p 5432 -U postgres -d dzzh_db_copy 

# 模拟4个客户端连接,每个事物创建新的连接 -C,-j 使用4个线程
./pgbench -c 4 -C -j 4 -h 192.168.1.253 -p 5432 -U postgres -d dzzh_db_copy  

-T (time)单次测试的运行时间

# 1分钟
-T 60

-t (transactions)指定事物

指定每个客户端运行多少个固定数量的事务就结束本次测试,默认10个

# 每个客户端执行20次事物
- t 20

-T -t 同时只能使用一种方式,要么指定时间,要么指定事务指定多少次

-R 用固定速率运行测试脚本

单位TPS

-L 超出阈值的事务报告

单位毫秒

./pgbench -T 10 -L 1 -c 8 -j 8  -f /usr/data/sql/bench_script_for_insert.sql@10 -f /usr/data/sql/bench_script_for_insert.sql@3 -h 192.168.1.253 -p 5432 -U postgres -d dzzh_db_copy 

输出选项

-d 参数可以输出debug信息,通常不用

-P 参数,可以每隔一段时间输出一次测试结果,例如每隔2秒输出一次测试结果

/usr/local/postgres/postgresql-12.5/src/bin/pgbench/pgbench -P 2 -T 7200 -c 8 -j 8 -f /usr/data/sql/bench_script_for_insert.sql@10 -h 192.168.1.253 -p 5432 -U postgres -d dzzh_db_copy 

-l或–log 将每一个事物执行的时间记入一个名称为“pgbench_log.n“的日志文件中,如果使用-j 参数指定使用多线程,则会生成名称为“pgbench_log.n.m”的日志文件。

如果希望使用自定义前缀,使用–log-prefix prefix_name

/usr/local/postgres/postgresql-12.5/src/bin/pgbench/pgbench -T 10 -l --log-prefix=custom -c 6 -j 2 -f /usr/data/sql/bench_script_for_insert.sql@10 -h 192.168.1.253 -p 5432 -U postgres -d dzzh_db_copy

猜你喜欢

转载自blog.csdn.net/qq_36213352/article/details/117129191