SRA OSS, Inc. 日本支社
DBT-3における性能の指標値は、PostgreSQL 8.1.4、8.2beta1ともにスケールファクターが増加するにつれて低下し、4を越えたあたりから25まで安定する。 このことから、データベースの規模が大きくなるに従い検索性能は低下するものの、それによるDBT-3の指標値への影響は小さいと考えられる。 データベースの構築に要した時間は、スケールファクターの増加に比例し、PostgreSQL 8.2beta1は8.1.4より短く、スケールファクターが25ではおよそ20%短縮されている。
PostgreSQL 8.1.4と8.2beta1における性能の比較は図1、2、3、4に示すとおりである。
Composite値はQuery Processing Power値とThroughput Numerical Quantity値との相乗平均、Query Processing Power値はストリーム数が1のときの検索性能、Throughput Numerical Power値は指定されたストリーム数における検索性能である。 いずれも単位はQueries per hour × Scale-Factor、すなわち、1時間あたりに実行できたクエリー数にスケールファクターを乗じた値であり、値が大きいほど性能が高いといえる。 また、Load Time値はデータベースの構築に要した時間であり、逆に値が小さいほど性能が高いといえる。

図1: PostgreSQL 8.1.4、8.2beta1におけるComposite値の比較

図2: PostgreSQL 8.1.4、8.2beta1におけるLoad Time値の比較

図3: PostgreSQL 8.1.4、8.2beta1におけるQuery Processing Power値の比較

図4: PostgreSQL 8.1.4、8.2beta1におけるThroughput Numerical Quantity値の比較
DBT-3の指標値については、図1、3、4に示すように、PostgreSQL 8.1.4、8.2beta1ともにスケールファクターが増加するにつれて低下し、4を越えたあたりから安定している。
スケールファクターが4を越えたあたりからDBT-3の指標値が安定するのは、それまでメモリ上で行われていた処理が、データベースの規模が大きくなったことにより、メモリに収まらなくなったためであると考えられる。 また、スケールファクターが25であっても安定していることから、データベースの規模の大きさに比例して検索性能は低下するものの、それによるDBT-3の指標値への影響は小さいと考えられる。これは、DBT-3の指標値がスケールファクターを乗じたものであり、データベースの規模が大きくなっても値が一定になるように設計されているためである。
スケールファクターが25のときのPostgreSQL 8.1.4、8.2beta1におけるクエリーの実行時間は図5に示すとおりである。
![]() a. PostgreSQL 8.1.4 |
![]() b. PostgreSQL 8.2beta1 |
図5に示すように、PostgreSQL 8.1.4、8.2beta1ともにQ9のクエリーの実行時間が全体に占める割合が非常に高い。 Q9のクエリーでは、文字列に対してインデックスの使用できない部分一致による条件が含まれており、それがクエリーの実行時間に占める割合が大きい。 PostgreSQL 8.2では、GIN(Generalized Inverted Index)と呼ばれる全文検索に応用できるインデックスが追加されており、それを使用することによって検索性能の改善が期待できる。
また、PostgreSQL 8.1.4と8.2beta1との違いとして8.1.4のほうがQ21のクエリーの実行時間が短い。 ただし、Q21のクエリーの実行時間が異なるのはスケールファクターが25のときのみである。 それ以外のスケールファクターでは、スケールファクターが4を越えてDBT-3の指標値が安定してからPostgreSQL 8.1.4、8.2beta1ともにQ21のクエリーの実行時間がQ9に次いで長いという傾向は同じである。 PostgreSQL 8.1.4のほうがQ21のクエリーの実行時間が短いのは、スケールファクターが16までは入れ子ループ結合(Nested Loop)が選択されていた実行計画が、25ではハッシュ結合(Hash Join)に変化したためである。 しかし、必ずしも実行計画としてハッシュ結合が選択されるわけではなく、プランナには改善の余地があると考えられる。
データベースの構築に要した時間については、図2に示すように、PostgreSQL 8.1.4、8.2beta1ともにスケールファクターの増加に比例している。 また、PostgreSQL 8.1.4と比較して8.2beta1のほうがデータベースの構築に要した時間が短く、スケールファクターが増加するにつれてPostgreSQL 8.1.4と8.2beta1との差が広がり、スケールファクターが25のときにはおよそ20%短縮されている。
これは、shared_buffersパラメータの初期設定の値がPostgreSQL 8.1.4より8.2beta1のほうが大きいためであると考えられる。 shared_buffersパラメータの初期設定の値はPostgreSQL 8.1.4では1000(およそ8MB)、8.2beta1では32000kB(およそ32MB)である。
ちなみに、指定されたスケールファクターによって生成されるテキストデータと、それを実際にデータベースに格納した際のデータベースクラスタのディスク使用量(WALファイルは除く)は表1に示すとおりである。 なお、PostgreSQL 8.2beta1は8.1.4よりデータベースクラスタのディスク使用量がわずかに大きかったが、0.1%以下の違いしかなかったため、ここでは同じものとして示している。
| スケールファクター | ディスク使用量 | |
|---|---|---|
| テキストデータ | データベースクラスタ | |
| 1 | 1.2GB | 2.9GB |
| 2 | 2.2GB | 5.6GB |
| 4 | 4.3GB | 12GB |
| 8 | 8.5GB | 23GB |
| 16 | 17GB | 44GB |
| 25 | 27GB | 69GB |