Postgre SQL   发布时间:2022-05-20  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了PostgreSQL数据库压力测试工具pgbench简单应用大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
PG数据库提供了一款轻量级的压力测试工具叫pgbench,其实就是一个编译好后的扩展性的可执行文件。介绍如下。
环境:
CentOS 5.7(final)
PG:9.1.2
Vmware 8.0
数据库参数: max_connection=100,其他略,默认

1.安装
进入源码安装包,编译,安装
[POSTGRes@localhost  ~]$ cd POSTGResql-9.1.2/contrib/pgbench/
[POSTGRes@localhost  pgbench]$ ll
@R_39_10586@l 164
-rw-r--r--. 1 POSTGRes POSTGRes   538 Dec  1  2011 Makefile
-rwxrwxr-x. 1 POSTGRes POSTGRes 50203 Apr 26 23:50 pgbench
-rw-r--r--. 1 POSTGRes POSTGRes 61154 Dec  1  2011 pgbench.c
-rw-rw-r--. 1 POSTGRes POSTGRes 47920 Apr 26 23:50 pgbench.o
[POSTGRes@localhost  pgbench]$make all
[POSTGRes@localhost  pgbench]$make install
安装完毕以后可以在bin文件夹下看到新生成的pgbench文件
[POSTGRes@localhost  bin]$ ll $PGHOME/bin pgbench
-rwxr-xr-x. 1 POSTGRes POSTGRes 50203 Jul  8 20:28 pgbench
2.参数介绍
[POSTGRes@localhost  bin]$ pgbench --Help
pgbench is a benchmarking tool for Postgresql.

Usage:
  pgbench [OPTIONS]... [DBname]

Initialization options:
  -i           invokes initialization mode
  -F NUM       fill factor
  -s NUM       scaling factor

Benchmarking options:
  -c NUM       number of concurrent database clIEnts (default: 1)
  -C           establish new connection for each transaction
  -D VARname=VALUE
               define variable for use by custom script
  -f filename  read transaction script from filename
  -j NUM       number of threads (default: 1)
  -l           write transaction times to log file
  -M {simple|extended|prepareD}
               protocol for submitTing querIEs to server (default: simplE)
  -n           do not run VACUUM before tests
  -N           do not update tables "pgbench_tellers" and "pgbench_branches"
  -r           report average latency per command
  -s NUM       report this scale factor in output
  -S           perform SELECT-only transactions
  -t NUM       number of transactions each clIEnt runs (default: 10)
  -T NUM       duration of benchmark test in seconds
  -v           VACUUM all four standard tables before tests

Common options:
  -d           print deBUGging output
  -h HOSTname  database server host or socket directory
  -p PORT      database server port number
  -U USERname  connect as specifIEd database user
  --Help       show this Help,then exit
  --version    output version information,then exit

Report BUGs to .
3.初始化测试数据
[POSTGRes@localhost  ~]$ pgbench -i pgbench
creaTing tables...
10000 tuples done.
@R_489_9285@ tuples done.
30000 tuples done.
40000 tuples done.
50000 tuples done.
60000 tuples done.
70000 tuples done.
80000 tuples done.
90000 tuples done.
100000 tuples done.
set priMary key...
NOTICE:  alter table / ADD PRIMary KEY will create implicit index "pgbench_branches_pkey" for table "pgbench_branches"
NOTICE:  alter table / ADD PRIMary KEY will create implicit index "pgbench_tellers_pkey" for table "pgbench_tellers"
NOTICE:  alter table / ADD PRIMary KEY will create implicit index "pgbench_accounts_pkey" for table "pgbench_accounts"
VACUUM...done.
[POSTGRes@localhost  ~]$ psql -d pgbench
psql (9.1.2)
Type "Help" for Help.

pgbench=# SELEct count(1) from pgbench_accounts;
 count  
--------
 100000
(1 row)

pgbench=# SELEct count(1) from pgbench_branches;
 count 
-------
     1
(1 row)

pgbench=# SELEct count(1) from pgbench_history;
 count 
-------
     0
(1 row)

pgbench=# SELEct count(1) from pgbench_tellers;
 count 
-------
    10
(1 row)

pgbench=# \d+ pgbench_accounts
                table "public.pgbench_accounts"
  column  |     Type      | ModifIErs | Storage  | Description 
----------+---------------+-----------+----------+-------------
 aID      | Integer       | not null  | plain    | 
 bID      | Integer       |           | plain    | 
 abalance | Integer       |           | plain    | 
 filler   | character(84) |           | extended | 
Indexes:
    "pgbench_accounts_pkey" PRIMary KEY,btree (aID)
Has OIDs: no
Options: fillfactor=100

pgbench=# \d+ pgbench_branches
                table "public.pgbench_branches"
  column  |     Type      | ModifIErs | Storage  | Description 
----------+---------------+-----------+----------+-------------
 bID      | Integer       | not null  | plain    | 
 bbalance | Integer       |           | plain    | 
 filler   | character(88) |           | extended | 
Indexes:
    "pgbench_branches_pkey" PRIMary KEY,btree (bID)
Has OIDs: no
Options: fillfactor=100

pgbench=# \d+ pgbench_history 
                      table "public.pgbench_history"
 column |            Type             | ModifIErs | Storage  | Description 
--------+-----------------------------+-----------+----------+-------------
 tID    | Integer                     |           | plain    | 
 bID    | Integer                     |           | plain    | 
 aID    | Integer                     |           | plain    | 
 delta  | Integer                     |           | plain    | 
 mtime  | timestamp without time zone |           | plain    | 
 filler | character(22)               |           | extended | 
Has OIDs: no

pgbench=# \d+ pgbench_tellers 
                table "public.pgbench_tellers"
  column  |     Type      | ModifIErs | Storage  | Description 
----------+---------------+-----------+----------+-------------
 tID      | Integer       | not null  | plain    | 
 bID      | Integer       |           | plain    | 
 tbalance | Integer       |           | plain    | 
 filler   | character(84) |           | extended | 
Indexes:
    "pgbench_tellers_pkey" PRIMary KEY,btree (tID)
Has OIDs: no
Options: fillfactor=100
说明:
a.这里使用的是默认的参数值,带-s 参数时可指定测试数据的数据量,-f可以指定测试的脚本,这里用的是默认脚本
b.不要在生产的库上做,新建一个测试库,当生产上有同名的测试表时将被重置

4.测试过程
4.1 1个session

[POSTGRes@localhost  ~]$ nohup pgbench -c 1 -T 20 -r pgbench > file.out  2>&1
[POSTGRes@localhost  ~]$ more file.out 
nohup: ignoring input
starTing VACUUM...end.
transaction type: TPC-B (sort of)
scaling factor: 1
query mode: simple
number of clIEnts: 1
number of threads: 1
duration: 20 s
number of transactions actually processed: 12496                                                     tps = 624.747958 (including connections establishing)                                                tps = 625.375564 (excluding connections establishing)
statement latencIEs in milliseconds:
        0.005299        \set nbranches 1 * :scale
        0.000619        \set ntellers 10 * :scale
        0.000492        \set naccounts 100000 * :scale
        0.000700        \setrandom aID 1 :naccounts
        0.000400        \setrandom bID 1 :nbranches
        0.000453        \setrandom tID 1 :ntellers
        0.000430        \setrandom delta -5000 5000
        0.050707        BEGIN;
        0.200909        updatE pgbench_accounts SET abalance = abalance + :delta WHERE aID = :aID;
        0.098718        SELECT abalance FROM pgbench_accounts WHERE aID = :aID;
        0.111621        updatE pgbench_tellers SET tbalance = tbalance + :delta WHERE tID = :tID;
        0.107297        updatE pgbench_branches SET bbalance = bbalance + :delta WHERE bID = :bID;
        0.095156        INSERT INTO pgbench_history (tID,bID,aID,delta,mtimE) VALUES (:tID,:bID,:aID,:delta,CURRENT_TIMESTAMP);
        0.919101        END;
4.2 30个session
[POSTGRes@localhost  ~]$nohup pgbench -c 30 -T 20 -r pgbench > file.out  2>&1
[POSTGRes@localhost  ~]$ more file.out 
nohup: ignoring input
starTing VACUUM...end.
transaction type: TPC-B (sort of)
scaling factor: 1
query mode: simple
number of clIEnts: 30
number of threads: 1
duration: 20 s
number of transactions actually processed: 8056                                                      tps = 399.847446 (including connections establishing)                                                tps = 404.089024 (excluding connections establishing)
statement latencIEs in milliseconds:
    0.004195        \set nbranches 1 * :scale
    0.000685        \set ntellers 10 * :scale
    0.000887        \set naccounts 100000 * :scale
    0.000805        \setrandom aID 1 :naccounts
    0.000656        \setrandom bID 1 :nbranches
    0.000523        \setrandom tID 1 :ntellers
    0.000499        \setrandom delta -5000 5000
    0.515565        BEGIN;
    0.865217        updatE pgbench_accounts SET abalance = abalance + :delta WHERE aID = :aID;
    0.307207        SELECT abalance FROM pgbench_accounts WHERE aID = :aID;
    50.543371       updatE pgbench_tellers SET tbalance = tbalance + :delta WHERE tID = :tID;
    19.210089       updatE pgbench_branches SET bbalance = bbalance + :delta WHERE bID = :bID;
    0.384190        INSERT INTO pgbench_history (tID,CURRENT_TIMESTAMP);
    2.116383        END;
4.3 50个session
[POSTGRes@localhost  ~]$nohup pgbench -c 50 -T 20 -r pgbench > file.out  2>&1
[POSTGRes@localhost  ~]$ more file.out 
nohup: ignoring input
starTing VACUUM...end.
transaction type: TPC-B (sort of)
scaling factor: 1
query mode: simple
number of clIEnts: 50
number of threads: 1
duration: 20 s
number of transactions actually processed: 7504                                                      tps = 370.510431 (including connections establishing)                                                tps = 377.964565 (excluding connections establishing)
statement latencIEs in milliseconds:
        0.004291        \set nbranches 1 * :scale
        0.000769        \set ntellers 10 * :scale
        0.000955        \set naccounts 100000 * :scale
        0.000865        \setrandom aID 1 :naccounts
        0.000513        \setrandom bID 1 :nbranches
        0.000580        \setrandom tID 1 :ntellers
        0.000522        \setrandom delta -5000 5000
        0.604671        BEGIN;
        1.480723        updatE pgbench_accounts SET abalance = abalance + :delta WHERE aID = :aID;
        0.401148        SELECT abalance FROM pgbench_accounts WHERE aID = :aID;
        104.713566      updatE pgbench_tellers SET tbalance = tbalance + :delta WHERE tID = :tID;
        21.562787       updatE pgbench_branches SET bbalance = bbalance + :delta WHERE bID = :bID;
        0.412209        INSERT INTO pgbench_history (tID,CURRENT_TIMESTAMP);
        2.243497        END;
4.4 100个session
超过100个会报错,因为数据库当前设置最大session是100
[POSTGRes@localhost  ~]$ nohup pgbench -c 100 -T 20 -r pgbench> file.out  2>&1
[POSTGRes@localhost  ~]$ more file.out 
nohup: ignoring input
starTing VACUUM...end.
transaction type: TPC-B (sort of)
scaling factor: 1
query mode: simple
number of clIEnts: 100
number of threads: 1
duration: 20 s
number of transactions actually processed: 6032                                                      tps = 292.556692 (including connections establishing)                                                tps = 305.595090 (excluding connections establishing)
statement latencIEs in milliseconds:
        0.004508        \set nbranches 1 * :scale
        0.000787        \set ntellers 10 * :scale
        0.000879        \set naccounts 100000 * :scale
        0.001620        \setrandom aID 1 :naccounts
        0.000485        \setrandom bID 1 :nbranches
        0.000561        \setrandom tID 1 :ntellers
        0.000656        \setrandom delta -5000 5000
        3.660809        BEGIN;
        4.198062        updatE pgbench_accounts SET abalance = abalance + :delta WHERE aID = :aID;
        1.727076        SELECT abalance FROM pgbench_accounts WHERE aID = :aID;
        281.955832      updatE pgbench_tellers SET tbalance = tbalance + :delta WHERE tID = :tID;
        27.054125       updatE pgbench_branches SET bbalance = bbalance + :delta WHERE bID = :bID;
        0.524155        INSERT INTO pgbench_history (tID,CURRENT_TIMESTAMP);
        2.710619        END;
5.说明
我们主要关心的是最后的输出报告中的TPS值,里面有两个,一个是包含网络开销(including),另一个是不包含网络开销的 (excluding),这个值是反映的每秒处理的事务数,反过来也可以查出每个事务数所消耗的平均时间,一般认为能将硬件用到极致,速度越快越好。
http://www.POSTGResql.org/docs/9.1/static/pgbench.HTML

大佬总结

以上是大佬教程为你收集整理的PostgreSQL数据库压力测试工具pgbench简单应用全部内容,希望文章能够帮你解决PostgreSQL数据库压力测试工具pgbench简单应用所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。