TPC-Bについて

TPC-Bは、Transaction Processing Performance Councilが制定したデータベースの性能を測定するためのベンチマークの一つです。もっとも、これは、既に、obsoleteということになっていて、現在は、TPC-Cが、使われるようです。ただ、テストする側からすると、TPC-Cより簡単なので、使ってみても良いかもしれません。このTPC-Bを実装したベンチマークとしては、例えば、PostgreSQLには、pgbenchというプログラムが標準で入っています。

それで、TPC-Bの具体的な中身ですが、下記のTransaction Processing Performance Councilのサイトから仕様書がダウンロードできます。

http://www.tpc.org/

このTPC-Bの仕様書ですが、英文で、39ページあります。ちゃんと読めば読めるんでしょうが、私は挫折しました(汗)。

なので、pgbenchのREADME.pgbench_jisとpgbech.cの方を読みました。
そこから理解した内容で、簡単にTPC-Bについて説明します。

まず、TPC-Bで使うテーブルは、下記の4テーブルです。
(SQLで書いてあった方が分かりやすいですよね。)

create table branches(bid int not null,bbalance int,filler char(88));
create table tellers(tid int not null,bid int,tbalance int,filler char(84));
create table accounts(aid int not null,bid int,abalance int,filler char(84));
create table history(tid int,bid int,aid int,delta int,mtime timestamp,filler char(22));

実行するトランザクションの内容は、README.pgbench_jisからそのまま抜粋させてもらいます。

(1) begin;

(2) update accounts set abalance = abalance + :delta where aid = :aid;
    ここで,:deltaは1から1000までの値を取る乱数,:aid は 1から100000まで
    の値を取る乱数です.以下,乱数の値はそれぞれこのトランザクションの
    中では同じ値を使います.

(3) select abalance from accounts where aid = :aid;
    ここでは1件だけ検索されます.

(4) update tellers set tbalance = tbalance + :delta where tid = :tid;
    ここで :tid は 1から10の間の値をとる乱数です.

(5) update branches set bbalance = bbalance + :delta where bid = :bid;
    ここで :bid は 1 から[スケリングファクター]の間の値を取る乱数です.

(6) insert into history(tid,bid,aid,delta) values(:tid,:bid,:aid,:delta);

(7) end;

そして、このトランザクションを実行する前に各テーブルに格納しておくべきタプル数(レコード数)は、下記のようになります。

テーブル名 タプル数
————————-
branches 1
tellers  10
accounts 100000
history  0

さあ、後は、トランザクションを実行して、1秒間に実行できた回数が、TPC-Bの結果となります。
これが、TPC-Bです(本当か?)。

なお、pgbenchの場合、デフォルトでは、クライアント数は1で、各クライアントが実行するトランザクション数は、10となっています。
(TPC-Bで、クライアント数や、トランザクション数まで規定していいるのかは分かりません。たぶん、規格書に書いてあるはずですが。)

短縮したTPC-Bの説明でした。
ほとんどの、自分自身のためのメモみたいなものなので、内容の確実性についてはご容赦ください。