postgresql使用(二):在TPC-H的数据库上pgbench 压力测试

本专题

  1. postgresql使用(一):TPC-H tools生成数据集并导入至postgre的数据库
  2. postgresql使用(二):在TPC-H的数据库上pgbench 压力测试
  3. postgresql使用(三):收集Postgresql数据库统计信息

 

一、准备工作

首先来熟悉一下Postgresql自带的pgbench工具:

Postgresql pgbench:

  • pgbench支持tpc-b测试和自定义模型测试。
  • pgbench在多个并发的数据库会话中反复运行一系列相同的SQL命令,并计算事务执行的平均速率(每秒执行的事务个数)。
  • tps 显示的是每秒完成的事务数量(包含连接建立时间和不包含连接建立时间分别计算出的平均值)。

 

内部脚本测试:

准备命令(自定义初始化):

pgbench -i -s 20 pgbenchdb

测试命令

pgbench -r -j 2 -c 4 -T 60 pgbenchdb

一些参数说明:

  • -:在基准结束后,报告平均的每个命令的每语句等待时间(从客户端的角度来说是执行时间)。
  • -j threads: pgbench中的工作者线程数量。在多 CPU 机器上使用多于一个线程会有用。客户端会尽可能均匀地分布到可用的线程上。默认为 1。
  • -c clients:模拟的客户端数量,也就是并发数据库会话数量。默认为 1。
  • -T seconds:测试执行时间,而不是为每个客户端运行固定数量的事务。-t和-T是互斥的。

程序自带的脚本如下,包括一条插入语句,三条更新语句和一条查询语句。

\set nbranches :scale
\set ntellers 10 * :scale
\set naccounts 100000 * :scale
\setrandom aid 1 :naccounts
\setrandom bid 1 :nbranches
\setrandom tid 1 :ntellers
\setrandom delta -5000 5000
BEGIN;
UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;
SELECT abalance FROM pgbench_accounts WHERE aid = :aid;
UPDATE pgbench_tellers SET tbalance = 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;

可以使用自己的脚本进行独立测试,准备一个sql文件,命名为test.sql文件。

\set nbranches :scale
\set ntellers 10 * :scale
\set naccounts 100000 * :scale
\setrandom aid 1 :naccounts
\setrandom bid 1 :nbranches
\setrandom tid 1 :ntellers
\setrandom delta -5000 5000
INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);

运行自己的脚本:

pgbench -rf test.sql -c 4 -j 2 -T 60 pgbenchdb

-l 记录日志log,记录的日志在test.sql所在的文件夹内。

因为 -j 选项为2,多个工作者进程都有自己的日志文件。

 

日志的格式是:

client_id | transaction_no | time | script_no | time_epoch | time_us [schedule_lag]

  • time 是以微秒计的总共用掉的事务时间
  • script_no 标识了要使用哪个脚本文件(当用-f或者-b指定多个脚本时有用)
  • time_epoch 是一个 Unix 纪元格式的时间戳
  • time_us 是一个显示事务完成时间的以微秒计的偏移量(适合于创建一个带有分数秒的 ISO 8601 时间戳)
  • schedule_lag 是事务的预定开始时间和实际开始时间之间的差别,以微秒计。只有使用--rate选项时它才存在。

 

二、在TPC-H的数据库testdb上做压力测试pgbench

pgbench -rf try.sql -c 4 -j 2 -T 60 -n testdb

注意:一定要加 -n ,否则会遇到如下报错,因为testdb不是由pgbench -i 初始化自动生成的。

starting vacuum...

ERROR:  relation "pgbench_branches" does not exist(ignoring this error and continuing anyway)

ERROR:  relation "pgbench_tellers" does not exist(ignoring this error and continuing anyway)

ERROR:  relation "pgbench_history" does not exist(ignoring this error and continuing anyway)

try.sql

实际是tpc-h内置模板 query 6自动生成的。

参考资料:

https://www.postgresql.org/docs/9.5/pgbench.html

https://blog.csdn.net/enzesheng/article/details/42720691

https://blog.phpgao.com/how_to_use_pgbench.html(参数说明)

https://blog.csdn.net/ctypyb2002/article/details/78910990

https://blog.csdn.net/sunbocong/article/details/80021146

https://blog.phpgao.com/how_to_use_pgbench.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iteapoy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值