TPC-Bは、Transaction Processing Performance Councilが制定したデータベースの性能を測定するためのベンチマークの一つです。もっとも、これは、既に、obsoleteということになっていて、現在は、TPC-Cが、使われるようです。ただ、テストする側からすると、TPC-Cより簡単なので、使ってみても良いかもしれません。このTPC-Bを実装したベンチマークとしては、例えば、PostgreSQLには、pgbenchというプログラムが標準で入っています。
それで、TPC-Bの具体的な中身ですが、下記のTransaction Processing Performance Councilのサイトから仕様書がダウンロードできます。
この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の説明でした。
ほとんどの、自分自身のためのメモみたいなものなので、内容の確実性についてはご容赦ください。