HOTの効果 (1)
NTT オープンソースソフトウェアセンタ 笠原 辰仁
現在 (2009年1月) の最新版であるPostgreSQL8.3では、「HOT」と呼ばれる機能が追加されています。この「HOT」により、PostgreSQLの更新処理性能が劇的に向上し、ガベージ発生量が大幅に減少しました。本シリーズでは3回に分けて、この「HOT」の効果や仕組み、そして上手な使い方を詳しく解説していきたいと思います。
まず第1回は、HOTのおかげで何がどれくらい良くなったのか?ということを実感していただくため、「HOTの効果」についてベンチマーク測定を見ながら解説していきたいと思います。
HOTとは?
具体的な効果を見る前に、もう少しHOTについて説明します。HOTという名前は「Heap Only Tuple」から来ています。「ヒープのみのタプル」という意味ですが、もう少し言葉を足すと「インデックスを持たない、ヒープのみのタプル」ということになります。ヒープとはテーブルデータのことです。その詳しい意味は次回でお話します。HOTの狙いは下記の2つです。
- 不要なインデックスの更新を行なわないことによる更新処理コストの削減
- ガベージの自動回収
PostgreSQLは追記型アーキテクチャであるため、更新処理のたびにインデックスに新たなキーを追加する必要がありました。しかし、HOTのおかげでインデックスの更新作業をスキップできるようになりました。この改良により、更新処理にかかるコストが削減され、更新処理自体を迅速に行えるようになっています。
また、ガベージの処理についても大きな改良がなされました。追記型では更新や削除を行っても元のデータは消さずに残しておきます。このような不要なデータを、本記事ではガベージ (ゴミデータ) と呼びます。このガベージを掃除する機能が、VACUUMと呼ばれるメンテナンスになります。VACUUMは、ガベージを掃除し、その結果生じた空き領域を再利用するための処理です。この一連の処理を指して「ガベージの回収」と表現しています。HOTにより、従来VACUUMでしかできなかったガベージの回収を自動で実施してくれるようになったのです。
今回のベンチマーク測定で見るべきポイントは、このHOTの狙いが数値としてどのように表れているか?ということになります。
ベンチマークで性能を測る
では、ベンチマークを使ってPostgreSQL8.2.5と8.3.0の性能を見ていきます。なお、使用しているバージョンは古いものですが、現在 (2009.1) の最新版でも同様の結果が出ると見なしていただいて構いません。OSについては、Red Hat Enterprise Linux 5.1 (x86_64) を使っています。今回使用するベンチマークは次の2つです。
- DBT-1
- Amazonの様なオンライン書店をシミュレートする、参照処理がメインのベンチマークです。TPC-W の簡易版にあたります。
- DBT-2
- 商品の在庫管理の卸売業者をシミュレートする、更新処理がメインのベンチマークです。TPC-C の簡易版にあたります。
DBT-1、DBT-2ともに、OSDL(現 Linux Foundation)で作成されたツールです。DBT-1については、IPAで一部修正されたDBT-1本体と測定用の手順書が用意されています。DBMSのベンチマークに関するWeb上の記事等でDBT-1の名前を見かける方も多いのではないでしょうか?(参考: http://www.ipa.go.jp/software/open/forum/development/index.html )
DBT-1、DBT-2とも、負荷をかけるクライアントとPostgreSQLが動作するサーバの2層の構成で測定をしました。例えば、DBT-1であればクライアントでWebとAPがエミュレートされ、サーバに対して処理のリクエスト(SQL)が発行されることになります。
それぞれのベンチマークでの測定で使用した機器のスペックは以下となります。クライアントマシンについては割愛しますが、負荷をかけるのに充分なスペックのマシンを用いています。
- DBT-1
【サーバ】 CPU:Xeon 3GHz × 4 (Hyper-Threading ON) メモリ:12GB 内蔵HDD:Ultra SCSI 320 73GB × 1 【外付けストレージ】 コントローラキャッシュ:256MB ディスク:Ultra SCSI 320 146GB × 12 (RAID10)
- DBT-2
【サーバ】 CPU:Xeon Dual Core 3GHz × 2 メモリ:12GB 内蔵HDD:SAS 146GB × 1 【外付けストレージ】 コントローラキャッシュ:256MB ディスク:Ultra SCSI 320 146GB × 8 (RAID10)
このように性質の異なるベンチマークで、HOTの効果を探っていきます。最初は、更新処理がメインとなるDBT-2の結果から見ていきます。