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

PostgreSQL基准测试工具pgbench

原创 梧桐 2023-08-17
590

概述

测试的目的是了解硬件的处理能力;通过调整参数优化数据库事务处理性能。

pgbench是在PostgreSQL的基准测试的简单程序;它可能在并发的数据库会话中反复运行相同序列的 SQL 命令,并且计算平均事务率TPS(每秒的事务数);通过pgbench会测试一种基于 TPC-B,其中在每个事务中涉及五个SELECT、UPDATE以及INSERT命令。

本例仅用于说明操作方法,因硬件、参数差异,测试结果不代表数据库性能

参数

pgbench -i [ other-options ] dbname

选项:

  • -c 客户端数量,也就是并发数据库会话数量。默认为 1

  • -f 指定一个自定义脚本文件,通常用不到

  • -j 线程数量

  • -i 初始化模式

  • -r 在基准结束后,报告平均的每个命令的每语句等待时间(从客户端的角度来说是执行时间)

  • -s 插入的倍数,默认是1,即插入100000条;也就是执行多少次 generate_series(1,100000)。

  • -t 每个客户端运行的事务数量。默认为 10

  • -T 运行测试多少多秒

    注意: -t和-T互斥,不可同时出现

初始化

./pgbench -i -F 100 -s 400 -h 192.168.138.131 -p 5432 -U postgres postgres

系统将自动创建四个表,如果同名表已经存在会被先删除

pgbench_accounts #账户表 pgbench_branches #支行表 pgbench_history #历史信息表 pgbench_tellers #出纳表

在默认的情况下-s"比例因子"为 1,这些表初始包含的行数为:

table # of rows pgbench_branches 1 pgbench_tellers 10 pgbench_accounts 100000 pgbench_history 0

默认测试脚本(不用理这段)

pgbench执行从指定列表中随机选中的测试脚本, 它们包括带有-b的内建脚本和带有-f的用户提供的自定义脚本

默认的内建事务脚本

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;

如果选择simple-update内建脚本(选项 -N),第 3 和 4 步不会被包括在事务中。
如果选择select-only内建脚本(选项 -S),只会发出SELECT。

基准测试输出

./pgbench -c 10 -t 100 postgres -U postgres # 第一个postgres是库名,第二个是用户名 Password: starting vacuum...end. transaction type: <builtin: TPC-B (sort of)> scaling factor: 1 # 有四张表,这里是1,相当于每个表的数据*1(大概10倍,并不是准确的) -s query mode: simple # 共三种查询方式:-M, --protocol=simple|extended|prepared number of clients: 10 #并行客户端连接数 -c number of threads: 1 # 工作线程数,多个客户端公用这些工作线程 -j number of transactions per client: 100 # 每个客户端的事务数 number of transactions actually processed: 1000/1000 #实际处理的事务数 latency average = 3.973 ms #平均延迟时长 tps = 2517.159806 (including connections establishing) #包括建立联系 tps = 2529.364018 (excluding connections establishing) #不包括建立联系

建议

多运行几次测试,看看测试结果是不是可以重现;
注意自动清理进程autovacuum对测试的影响
-s 和 -c数量尽量一样,-c值超过-s,否则你将主要在度量更新争夺;
通常在另一台机器上运行pgbench,缓解自身给系统带来的资源消耗

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

评论