暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

pgbench的使用

进击的CJR 2024-11-26
57

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是互斥的。

最后修改时间:2024-11-26 17:23:31
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论