Pgbench shell 命令

来自 PostgreSQL 维基
跳转到导航跳转到搜索

这些与 shell 相关的功能是在 2009 年 9 月和 11 月的 PostgreSQL 提交节上为 8.5 版本提交的。

\setshell 选项

描述

此函数允许将参数设置为 shell 或 C 脚本的输出。

  • 此功能的详细信息
    • 对于给定的事务,可以启动一个自定义脚本,以便用户可以为该事务设置参数。pgbench 获取脚本的第一个输出并将其用作参数。如果输出不是整数,则返回错误,并且客户端进程停止。如果命令太长,也会返回相同的错误。
    • 默认情况下,这些命令的最大大小限制为 256 个字符。
    • 请注意,脚本的参数数量不受限制。
    • 默认原型可以定义为 "\setshell parameter_name scripts_name scripts_options"
  • 此功能在使用统计规律而不是当前实现的 \set 和 \setrandom 选项时起着至关重要的作用,例如模拟一组帐户的使用频率高于其他帐户的情况。用户也可以完全自由地设置参数,而无需修改 pgbench 的代码。

应用示例

可能性多种多样,适用于所有现有的统计分布:Preto、高斯或泊松。这完全取决于用户的需求。

\shell 选项

描述

此函数允许在事务文件中启动 shell 命令。

  • 此功能的详细信息
    • 对于给定的事务,可以在命令之前加上前缀 "\shell" 来启动 shell 命令。请注意,甚至可以在两个普通的 SQL 语句之间启动此类命令。
    • 默认配置下,shell 命令限制为 256 个字符。

2PC 事务示例

  • 此事务是生成随机准备 ID 的 2PC。
\set nbranches :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
\setrandom txidrand 0 10000
START TRANSACTION;
UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;
SELECT abalance FROM pgbench_accounts 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);
PREPARE TRANSACTION ':txidrand';
\shell ls -ll >> /tmp/log_data`date '+%Y%m%d'`_`date '+%k%M'`
COMMIT PREPARED ':txidrand';

在准备和提交语句之间,用户可以扫描 pg_twophase 以查看 2PC 状态文件的大小。

普通事务示例

  • 作为可能的应用,可以使用简单的 ls -ll 查看 pg_twophase 中的 2PC 状态文件。
Begin;
[Transaction instructions]
Prepare transaction ‘TXID’;
\shell ls ~/pg_twophase;
Commit prepared ‘TXID’;