使用Postgresql自带pgbench进行性能测试
2020-06-24 04:28
1226 查看
一、pgbench基础认知
- postgresql自带提供了一款轻量级的压力测试工具:pgbench
- 可自行编写脚本,按自己的需求对数据库进行性能压力测试
- postgres软件安装配置,默认安装的位置是 /pg根目录/bin
在用pgbench操作前,先了解下pgbench命令:
-c NUM 数据库客户端并发数(默认:1) -C (为每个事务建立新的连接) -D VARNAME=VALUE 通过客户脚本为用户定义变量 -f FILENAME 从文件FILENAME读取事务脚本 -j NUM 线程数(默认:1) -i 写事务时间到日志文件 -M{simple|extended|prepared} 给服务器提交查询的协议 -n 在测试之前不运行VACUUM -N 不更新表“pgbench_tellers” “pgbench_branches” -r 报告每条命令的平均延迟 -s NUM 在输出中报告规模因子 -S 执行 SELECT-only事务 -t NUM 每个客户端运行的事务数(默认:10) -T NUM benchmark测试时间(单位:秒) -v 在测试前清空所有的四个标准表 -p 显示每个进程所需要的时间 scale乘以10万:表示测试数据量 range:表示活跃数据量
为pgbench设置环境变量
export PGHOST=<PostgreSQL实例内网地址> export PGPORT=<PostgreSQL实例端口> export PGDATABASE=postgres export PGUSER=<PostgreSQL数据库用户名> export PGPASSWORD=<PostgreSQL对应用户的密码>
二、创建测试数据
1、构建测试环境:
- 进入pgsql并创建测试用户
CREATE ROLE pg_bench LOGIN ENCRYPTED PASSWORD 'oracle' SUPERUSER INHERIT CREATEDB NOCREATEROLE REPLICATION;
- 创建测试表空间
// 使用root用户创建表空间目录: mkdir /home/ptbs // 授予postgres用户操作权限: chown –R postgres /home/ptbs // 创建表空间tbs: CREATE TABLESPACE tbs OWNER pg_bench LOCATION '/home/ptbs'; // 创建测试库pg_bench: CREATE DATABASE pg_bench WITH OWNER = pg_bench ENCODING = 'UTF8' TABLESPACE = tbs;``
2、初始化测试环境
使用命令:pgbench -i [ other-options ] dbname
如:
pgbench –p 9999 –U postgres –I pg_bench
执行完成后,进入测试库pg_bench,发现创建了4个表:
psql –p 9999 –U postgres –d pg_bench
由于使用的是默认参数创造的测试表,各表数据量如下:(history表是记录表,创建时为空)
name | size |
---|---|
pgbench_accounts | 100000 |
pg_branches | 1 |
pg_tellers | 10 |
在创建测试表的时候可以设置测试数据的量如:
pgbench –p 9999 –U postgres –i –F 100 –s 500 pg_bench
会将测试数据扩大500倍
测试脚本
pg_bench工具自带一个测试脚本
脚本如下:
static char *tpc_b = { "\\set nbranches :scale\n" "\\set ntellers 10 * :scale\n" "\\set naccounts 100000 * :scale\n" "\\setrandom aid 1 :naccounts\n" "\\setrandom bid 1 :nbranches\n" "\\setrandom tid 1 :ntellers\n" "\\setrandom delta -5000 5000\n" "BEGIN;\n" "UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;\n" "SELECT abalance FROM pgbench_accounts WHERE aid = :aid;\n" "UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid;\n" "UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid;\n" "INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);\n" "END;\n" }; /* -N case */ static char *simple_update = { "\\set nbranches :scale\n" "\\set ntellers 10 * :scale\n" "\\set naccounts 100000 * :scale\n" "\\setrandom aid 1 :naccounts\n" "\\setrandom bid 1 :nbranches\n" "\\setrandom tid 1 :ntellers\n" "\\setrandom delta -5000 5000\n" "BEGIN;\n" "UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;\n" "SELECT abalance FROM pgbench_accounts WHERE aid = :aid;\n" "INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);\n" "END;\n" }; /* -S case */ static char *select_only = { "\\set naccounts 100000 * :scale\n" "\\setrandom aid 1 :naccounts\n" "SELECT abalance FROM pgbench_accounts WHERE aid = :aid;\n" };
此脚本分别执行了insert,update,select,可有效测试数据库吞吐能力,和并发效率
压力测试
直接在单节点,5433上执行:
pgbench –p 5433 –U pg_bench –c 30 –T 20 –r pg_bench
优劣势
经过测试,发现pg_bench有以下优劣点:
优势:
1.系统自带,与postgresql兼容性好,且配置方便
2.工具小,执行速度快
3.开源软件,可在网上找到各种功能插件
劣势:
1.测量结果浮动较大,就多次实验来看,测量结果从40tps到400tps都出现过,统计后发现绝大多数执行结果落在350~400区间。故使用时须多次执行,取合适的值。
2.无法中断。执行过程中无法中断测试操作,就算kill了pg_bench进程,他的脚本也已经进入postgresql,postgresql依然会继续跑测试。只能等着他跑完。
相关资源:
PG中文网
PG-EN pgbench-help
相关文章推荐
- [原创]使用benchmarksql和pgbench对PostgreSQL Plus Advanced Server进行性能测试
- 使用JMeter进行性能测试
- 如何使用Windows Media Load Simulator进行Windows Media服务器性能测试和监控
- Jmeter--使用JMeter进行性能测试(Java请求)
- 在项目中使用Hibernate进行大数据量的性能测试,有一些总结(转贴)
- 使用Hibernate进行大数据量的性能测试
- 使用Jmeter对mysql进行性能测试入门
- 使用console进行 性能测试 和 计算代码运行时间
- 使用 Hibernate 进行大数据量的性能测试
- 使用Super Smack进行MySQL性能测试
- 使用testNG进行并发性能测试
- Win7下的使用QTP进行猴子测试的性能日志实现方法
- 使用TestNG进行性能测试/重复执行
- 使用Loadrunner对IBM MQ进行性能测试
- 使用console进行性能测试
- 使用JMeter进行性能测试
- 使用JMeter进行性能测试
- 使用loadrunner和HttpClient对163网站进行性能测试实验
- 使用JMeter进行性能测试
- 使用LoadRunner进行性能测试的简单步骤