请帮我澄清一下,pgbench工具是否可以并行执行我自己的sql场景?谷歌搜索和本地搜索没有得到积极的结果。
我运行的脚本执行时没有任何错误。但在执行之后,我看不到任何迹象表明我的剧本真的被执行了。pgbench是否使用我的sql脚本提交事务?
这是我得到的输出:
C:Program FilesPostgreSQL9.2bin>pgbench.exe -n -h dbserverhost -U postgres -
T 10 -c 64 -j 8 bench_dbname -f c:Devbench_script.sql
transaction type: TPC-B (sort of)
scaling factor: 1
query mode: simple
number of clients: 64
number of threads: 8
duration: 10 s
number of transactions actually processed: 1020
tps = 95.846561 (including connections establishing)
tps = 103.387127 (excluding connections establishing)
C:Program FilesPostgreSQL9.2bin>
SQL脚本bench_script.SQL为:
--comment here
begin;
insert into schm.log values ( 'pgbench test', current_timestamp );
end;
解决方案
pgBench Windows版本对传递给实用程序的参数顺序很敏感:"bench_dbname"参数必须是一行中的最后一个参数。
这是pgbench Windows版本命令行的正确示例:
pgbench.exe -d -r -h 127.0.0.1 -U postgres -T 5 -f C:Devbench_script.sql -c 64 -j 8 postgres
对我来说最有用的论据是:
- -T 60(运行脚本的时间(秒)
- -t 100(每个客户的交易金额)
- -d将详细的调试信息打印到输出
- -r包含在为脚本的每个操作计算的摘要延迟值中
- -f在基准测试模式下运行用户定义的sql脚本
- -c客户金额
- -j线程数量
pgBench官方文档
PgBench,我爱你!:)
向大家致以最良好的祝愿;)
"事务类型:TPC-B(有点)"意味着它没有处理-f选项来运行自定义sql脚本,而是运行默认查询。
在Windows版本中,一旦getopt到达第一个不以连字符开头的选项,即"bench_dbname",它似乎就会停止解析这些选项。所以请确保-f在这之前。
我想只要您使用自定义脚本,您也需要-n
选项?
-n
--无真空
Perform no vacuuming before running the test. This option is necessary if you are running a custom test scenario that does not include the standard tables pgbench_accounts, pgbench_branches, pgbench_history, and pgbench_tellers.