PostgreSQL 11 preview - pgbench 变量、函数扩展 - 暨pgbench 自定义 benchmark讲解

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

标签

PostgreSQL , pgbench , 压测 , 变量 , tpc-b , 自定义压测


背景

pgbench是PostgreSQL软件包中的一款benchmark软件,纯C编码,效率高,压测方便。

内置TPC-B benchmark测试,同时支持自定义benchmark。

详细文档见

https://www.postgresql.org/docs/10/static/pgbench.html

pgbench 自定义benchmark脚本支持的语法

变量赋值的语法

压测需要生成输入变量,才能使得压测覆盖更广的数据范围。

1、pgbench 命令行输入变量

-D varname=value    
--define=varname=value    
    
Define a variable for use by a custom script (see below). Multiple -D options are allowed.    

2、benchmark脚本内变量,表达式的值赋予给变量

\set varname express    

3、pgbench 自带的两个变量(一个是指client id, 每个连接一个,另一个是scale factor,即pgbench -s 输入的值。)

pic

表达式语法

1、数据类型

INT,浮点类型

2、支持的操作符

unary operators (+, -)     
    
binary operators (+, -, *, /, %)     
    
括号    

3、函数调用

pic

睡眠语法

模拟真实环境,APP处理消耗时间,再次发起请求的间隔。

\sleep number [ us | ms | s ]    

shell调用语法1

调用shell并将标准输出赋予变量,用于在测试过程中调用SHELL命令。

\setshell varname command [ argument ... ]    
    
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon    

shell调用语法2

调用shell并抛弃结果,用于在测试过程中调用SHELL命令。

\shell command [ argument ... ]    
    
\shell command literal_argument :variable ::literal_starting_with_colon    

生成随机值的几个函数

1、随机分布随机数

在取值区间内,所有值的概率一致。

\set varname random(min, max)    
    
\set id random(1,100000)    

2、高斯分布随机数

\set varname random_gaussian(lb, ub, parameter)    

在取值区间内,

约67%的值分布在以min,max数学期望为中心的 "1.0 / 参数" 这个区间。

约95%的值分布在以min,max数学期望为中心的 "2.0 / 参数" 这个区间。

参数越大,鈡的曲线越陡峭

pic

参数越小,鈡的曲线越平缓

pic

3、指数分布随机数

\set varname random_exponential(lb, ub, parameter)    

在取值区间内,"1%" 的高频词,在最靠近min的区间,出现 "参数%" 次。

参数越大,越趋向生成更小的值(越靠近min,出现概率越高)。

pic

pic

参数越小,越趋向随机分布。

pic

pic

4、也可以使用shell调用生成随机数。

1 -----------------------    
\setshell varname command [ argument ... ]    
    
Sets variable varname to the result of the shell command command with the given argument(s).     
The command must return an integer value through its standard output.    
    
command and each argument can be either a text constant or a :variablename reference to a variable.     
If you want to use an argument starting with a colon, write an additional colon at the beginning of argument.    
    
Example:    
    
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon    
    
2 -----------------------    
\shell command [ argument ... ]    
    
Same as \setshell, but the result of the command is discarded.    
    
Example:    
    
\shell command literal_argument :variable ::literal_starting_with_colon    

pgbench 例子

tpc-b benchmark 例子

1、初始化测试数据(如已有,可忽略)

-s 100 单位为10万行,100表示1000万行数据。    
    
pgbench -i -s 100    

2、压测

32个连接,测试120秒。    
    
pgbench -M prepared -n -r -P 1 -c 32 -j 32 -T 120    

自定义 benchmark 例子

1、创建测试脚本

vi test.sql    
    
\set aid random(1, 100000 * :scale)    
\set bid random(1, 1 * :scale)    
\set tid random(1, 10 * :scale)    
\set delta random(-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;    

2、压测

32个连接,测试120秒。    
    
pgbench -M prepared -n -r -f ./test.sql -P 1 -c 32 -j 32 -T 120    

PostgreSQL 11 preview

增加 pow 函数

https://commitfest.postgresql.org/15/1357/

增加 操作符

https://commitfest.postgresql.org/15/985/

Here is a simple patch which adds a bunch of operators :    
    
bitwise: & | ^ ~,     
comparisons: =/== <>/!= < <= > >=,     
logical: and/&& or/|| xor/^^ not/!    
functions (exp ln if)     
    
to pgbench. I've tried to be pg's SQL compatible     
where appropriate.    

参考

《PostgreSQL 使用 pgbench 测试 sysbench 相关case》

《PostgreSQL pgbench SQL RT 与 事务RT 浅析》

《生成泊松、高斯、指数、随机分布数据 - PostgreSQL 9.5 new feature - pg_bench improve, gaussian (standard normal) & exponential distribution》

其他例子

《HTAP数据库 PostgreSQL 场景与性能测试之 43 - (OLTP+OLAP) unlogged table 含索引多表批量写入》

《HTAP数据库 PostgreSQL 场景与性能测试之 42 - (OLTP+OLAP) unlogged table 不含索引多表批量写入》

《HTAP数据库 PostgreSQL 场景与性能测试之 41 - (OLTP+OLAP) 含索引多表批量写入》

《HTAP数据库 PostgreSQL 场景与性能测试之 40 - (OLTP+OLAP) 不含索引多表批量写入》

《HTAP数据库 PostgreSQL 场景与性能测试之 39 - (OLTP+OLAP) 含索引多表单点写入》

《HTAP数据库 PostgreSQL 场景与性能测试之 38 - (OLTP+OLAP) 不含索引多表单点写入》

《HTAP数据库 PostgreSQL 场景与性能测试之 37 - (OLTP+OLAP) 含索引单表批量写入》

《HTAP数据库 PostgreSQL 场景与性能测试之 36 - (OLTP+OLAP) 不含索引单表批量写入》

《HTAP数据库 PostgreSQL 场景与性能测试之 35 - (OLTP+OLAP) 含索引单表单点写入》

《HTAP数据库 PostgreSQL 场景与性能测试之 34 - (OLTP+OLAP) 不含索引单表单点写入》

《HTAP数据库 PostgreSQL 场景与性能测试之 33 - (OLAP) 物联网 - 线性字段区间实时统计》

《HTAP数据库 PostgreSQL 场景与性能测试之 32 - (OLTP) 高吞吐数据进出(堆存、行扫、无需索引) - 阅后即焚(JSON + 函数流式计算)》

《HTAP数据库 PostgreSQL 场景与性能测试之 31 - (OLTP) 高吞吐数据进出(堆存、行扫、无需索引) - 阅后即焚(读写大吞吐并测)》

《HTAP数据库 PostgreSQL 场景与性能测试之 30 - (OLTP) 秒杀 - 高并发单点更新》

《HTAP数据库 PostgreSQL 场景与性能测试之 29 - (OLTP) 高并发空间位置更新(含空间索引)》

《HTAP数据库 PostgreSQL 场景与性能测试之 28 - (OLTP) 高并发点更新》

《HTAP数据库 PostgreSQL 场景与性能测试之 27 - (OLTP) 物联网 - FEED日志, 流式处理 与 阅后即焚 (CTE)》

《HTAP数据库 PostgreSQL 场景与性能测试之 26 - (OLTP) NOT IN、NOT EXISTS 查询》

《HTAP数据库 PostgreSQL 场景与性能测试之 25 - (OLTP) IN , EXISTS 查询》

《HTAP数据库 PostgreSQL 场景与性能测试之 24 - (OLTP) 物联网 - 时序数据并发写入(含时序索引BRIN)》

《HTAP数据库 PostgreSQL 场景与性能测试之 23 - (OLAP) 并行计算》

《HTAP数据库 PostgreSQL 场景与性能测试之 22 - (OLTP) merge insert|upsert|insert on conflict|合并写入》

《HTAP数据库 PostgreSQL 场景与性能测试之 21 - (OLTP+OLAP) 排序、建索引》

《HTAP数据库 PostgreSQL 场景与性能测试之 20 - (OLAP) 用户画像圈人场景 - 多个字段任意组合条件筛选与透视》

《HTAP数据库 PostgreSQL 场景与性能测试之 19 - (OLAP) 用户画像圈人场景 - 数组相交查询与聚合》

《HTAP数据库 PostgreSQL 场景与性能测试之 18 - (OLAP) 用户画像圈人场景 - 数组包含查询与聚合》

《HTAP数据库 PostgreSQL 场景与性能测试之 17 - (OLTP) 数组相似查询》

《HTAP数据库 PostgreSQL 场景与性能测试之 16 - (OLTP) 文本特征向量 - 相似特征(海明...)查询》

《HTAP数据库 PostgreSQL 场景与性能测试之 15 - (OLTP) 物联网 - 查询一个时序区间的数据》

《HTAP数据库 PostgreSQL 场景与性能测试之 14 - (OLTP) 字符串搜索 - 全文检索》

《HTAP数据库 PostgreSQL 场景与性能测试之 13 - (OLTP) 字符串搜索 - 相似查询》

《HTAP数据库 PostgreSQL 场景与性能测试之 12 - (OLTP) 字符串搜索 - 前后模糊查询》

《HTAP数据库 PostgreSQL 场景与性能测试之 11 - (OLTP) 字符串搜索 - 后缀查询》

《HTAP数据库 PostgreSQL 场景与性能测试之 10 - (OLTP) 字符串搜索 - 前缀查询》

《HTAP数据库 PostgreSQL 场景与性能测试之 9 - (OLTP) 字符串模糊查询 - 含索引实时写入》

《HTAP数据库 PostgreSQL 场景与性能测试之 8 - (OLTP) 多值类型(数组)含索引实时写入》

《HTAP数据库 PostgreSQL 场景与性能测试之 7 - (OLTP) 全文检索 - 含索引实时写入》

《HTAP数据库 PostgreSQL 场景与性能测试之 6 - (OLTP) 空间应用 - KNN查询(搜索附近对象,由近到远排序输出)》

《HTAP数据库 PostgreSQL 场景与性能测试之 5 - (OLTP) 空间应用 - 空间包含查询》

《HTAP数据库 PostgreSQL 场景与性能测试之 4 - (OLAP) 大表OUTER JOIN统计查询》

《HTAP数据库 PostgreSQL 场景与性能测试之 3 - (OLAP) 大表JOIN统计查询》

《HTAP数据库 PostgreSQL 场景与性能测试之 2 - (OLTP) 多表JOIN》

《HTAP数据库 PostgreSQL 场景与性能测试之 1 - (OLTP) 点查》

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
4月前
|
Cloud Native 关系型数据库 分布式数据库
掌阅科技采用云原生数据库PolarDB,大幅降低使用成本,提升业务稳定性和扩展性
掌阅科技将数据库迁移到PolarDB后,数据压缩到之前的30%,整体成本节省50%。
104 0
|
3天前
|
负载均衡 关系型数据库 数据管理
关系型数据库的横向扩展
关系型数据库的横向扩展
16 6
|
3天前
|
存储 负载均衡 关系型数据库
关系型数据库垂直扩展限制
关系型数据库垂直扩展限制
16 4
|
2月前
|
关系型数据库 PostgreSQL
postgresql日程排程函数的编写实例
postgresql日程排程函数的编写实例
|
3月前
|
SQL 关系型数据库 分布式数据库
在PolarDB for PostgreSQL中,你可以使用LIKE运算符来实现类似的查询功能,而不是使用IF函数
在PolarDB for PostgreSQL中,你可以使用LIKE运算符来实现类似的查询功能,而不是使用IF函数
47 7
|
5月前
|
SQL 关系型数据库 C语言
PostgreSQL【应用 03】Docker部署的PostgreSQL扩展SQL之C语言函数(编写、编译、载入)计算向量余弦距离实例分享
PostgreSQL【应用 03】Docker部署的PostgreSQL扩展SQL之C语言函数(编写、编译、载入)计算向量余弦距离实例分享
49 0
|
5月前
|
SQL 关系型数据库 数据库
PostgreSQL【应用 02】扩展SQL之C语言函数(编写、编译、载入)实例分享
PostgreSQL【应用 02】扩展SQL之C语言函数(编写、编译、载入)实例分享
55 0
|
5月前
|
SQL 关系型数据库 PostgreSQL
PostgreSQL【SQL 01】根据条件更新字段值或追加信息STRPOS(string, substring)函数使用及LIKE函数对比
PostgreSQL【SQL 01】根据条件更新字段值或追加信息STRPOS(string, substring)函数使用及LIKE函数对比
62 0
|
5月前
|
SQL 关系型数据库 测试技术
postgresql|数据库|数据库测试工具pgbench之使用
postgresql|数据库|数据库测试工具pgbench之使用
97 0
|
5月前
|
SQL 关系型数据库 编译器
PostgreSQL SQL扩展 ---- C语言函数(二)
可以用C(或者与C兼容,比如C++)语言编写用户自定义函数(User-defined functions)。这些函数被编译到动态可加载目标文件(也称为共享库)中并被守护进程加载到服务中。“C语言函数”与“内部函数”的区别就在于动态加载这个特性,二者的实际编码约定本质上是相同的(因此,标准的内部函数库为用户自定义C语言函数提供了丰富的示例代码)
72 0

相关产品

  • 云原生数据库 PolarDB