PostgreSQL测试工具PGbench

PostgreSQL测试工具PGbench,第1张

概述介绍《PostgreSQL测试工具PGbench》开发教程,希望对您有用。

《Postgresql测试工具PGbench》要点:
本文介绍了Postgresql测试工具PGbench,希望对您有用。如果有疑问,可以联系我们。

pgbench 是一个简单的给 Postgresql 做性能测试的程序.它反复运行同样的 sql 命令序列,可能是在多个并发数据库会话上头,然后检查平均的事务速度(每秒的事务数 tps).缺省的时候,pgbench 测试一个(松散的)接近 TPC-B 的情况,每个事务包含五个 SELECT,UPDATE,和 INSERT命令.不过,我们可以很轻松地使用自己的事务脚本文件来实现其它情况.

典型的输出看上去会是这样:

transaction type: TPC-B (sort of)

头四行只是报告一些最重要的参数设置.跟着的一行报告完成的事务数和期望完成的事务数(后者只是客户端数乘以事务数);这两个会相等,除非在完成之前运行就失败了.最后两行报告 TPS 速率,分别有计算启动数据库会话时间和不计算启动会话时间的.

使用环境:

在比较新的9.1,9.2,9.3数据库的发行版本中,pgbench是在安装contrib包时直接编译的,可以在postgres的bin目录下找到该命令,如果没有发现该命令可以在安装contrib的目录下找到pgbench的源码文件包,编译一下就可以使用.

1. pgbench测试库初始化
postgres$ pgbench --help # 和postgres其他命令的使用方式一样,--help获取命令使用方式的简单介绍postgres$ createdb pgbench # 创建测试库postgres$ pgbench -i pgbench # 初始化测试库

默认会在测试库中建4张表pgbench_accounts,pgbench_branches,pgbench_history,pgbench_tellers .当然也可以自己建表,自己写测试脚本,这四张表只是默认的测试脚本会用到.

pgbench在建默认库时 -s 参数设定测设表的大小,默认参数是1 .pgbench_accounts 总行数是10W,-s后面接具体数值如100,则pgbench_accounts中的测试数据将达到1千万行

2. 默认的测试脚本介绍

默认的测试脚本可以在官方文档中找到(新的版本中不指定模板就会使用默认模板)

$ cat test.sql\set nbranches 1 * :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

脚本说明:

可以看到脚本中的一个事物包括了update,select,insert *** 作,不同的 *** 作起到不同的测试目的

(1)UPDATE pgbench_accounts:作为最大的表,起到促发磁盘I/O的作用.

(2)SELECT abalance:由于上一条UPDATE语句更新一些信息,存在于缓存内用于回应这个查询.

(3)UPDATE pgbench_tellers:职员的数量比账号的数量要少得多,所以这个表也很小,并且极有可能存在于内存中.

(4)UPDATE pgbench_branches:作为更小的表,内容被缓存,如果用户的环境是数量较小的数据库和多个客户端时,对其锁 *** 作可能会成为性能的瓶颈.

(5)INSERT INTO pgbench_history:history表是个附加表,后续并不会进行更新或查询 *** 作,而且也没有任何索引.相对于UPDATE语句,对其的插入 *** 作对磁盘的写入成本也很小.

3. 测试结果说明
postgres$ pgbench -c 15 -t 300 pgbench -r -f test.sql #执行命令starting vacuum...end.

默认的基准测试给出了一个指标TPS,同样的测试参数,tps的值越高,相对来说服务器的性能越好.上面的测试由于数据量的问题,表的内容全部缓存进了内存,磁盘io对上面的结果影响较小.

4. 自定义测试环境

在实际的应用中测试可以自己定义测试环境,模拟生产需求.

测试举例:

pgbench=# create table pg_test (a1 serial,a2 int,a3 varchar(20),a4 timestamp); #创建测试表postgres$cat pg_test.sqlpgbench=# insert into pg_test(a2,a3,a4) select (random()*(2*10^5)),substr('abcdefghijklmnopqrstuvwxyz',1,(random()*26)::integer),Now(); #每个事务插入一条数据 postgres$pgbench -c 90 -T 10 pgbench -r -f pg_test.sql #90个并发测试每秒插入的数据量

测试结果截取:

number of transactions actually processed: 20196 #10秒钟90并发用户共插入20196条数据,每条数据插入费时42ms,平均每秒插入2000条数据
5. pgbench在参数调节上的辅助使用

简单举例:work_mem

postgres=# show work_mem ; #数据库当前的work_memwork_mem

查询样本:

postgres$cat select.sql

执行结果截取

number of clIEnts: 90

测试环境相同调节 work_mem参数为2M试试

number of clIEnts: 90

原因分析,由于排序 *** 作会关系到 work_mem,排序 *** 作能全在缓存中进行当然速度会明显加快,查看执行计划

postgres=# explain analyze SELECT customerID FROM customers ORDER BY zip;query PLAN --------------------------------------------------------------------------------------------Sort (cost=2116.77..2166.77 rows=20000 wIDth=8) (actual time=42.536..46.117 rows=20000 loops=1)Sort Key: zipSort Method: external sort disk: 352kB-> Seq Scan on customers (cost=0.00..688.00 rows=20000 wIDth=8) (actual time=0.013..8.942 rows=20000 loops=1)Total runtime: 48.858 ms

由上面的执行计划可以看出在work_mem大小为1M的时候排序一共需要1.352M空间做排序,所以加大work_mem参数排序速度明显增加.【有兴趣可以加入588678536一起交流学习心得】

这只是个简单的例子,work_mem的大小调节还有很多其他方面要考虑的,比如在高并发的情况下,需要为每个用户分配同样大小的排序空间,会占用大量的内存空间.参数调节在任何时候坚持一个均衡才是应该考虑的.

《Postgresql测试工具PGbench》是否对您有启发,欢迎查看更多与《Postgresql测试工具PGbench》相关教程,学精学透。内存溢出PHP学院为您提供精彩教程。

总结

以上是内存溢出为你收集整理的PostgreSQL测试工具PGbench全部内容,希望文章能够帮你解决PostgreSQL测试工具PGbench所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1182781.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存