徹底比較!! Oracle & PostgreSQL 8

Oracleとの比較

Oracleとの比較

OracleとPostgreSQL(VACUUM未実行)
図3:OracleとPostgreSQL(VACUUM未実行)
 

   上記は同じテストを行った場合のOracleの結果とVACUUMを実行しなかった(3回目、4回目の間ではデータ更新も発生しないので、同じ条件でしかありません)場合のPostgreSQLを比べてみたものです。

   PostgreSQL単独で見た場合、図1の結果と比べると、VACUUMが実行されないために、3回目と4回目ではデータファイルのサイズに違いはなく、レスポンスタイムもほとんど同じ結果となりました。

   一方のOracleの場合、表は個別のデータファイルと対応しないため、社員表を構成するエクステント全体の総ブロック数からそのサイズをだしてい ます。この値は複数回の50万件更新後でも、まったく変わりはありませんでした。レスポンスタイムも悪化は見られずほぼ一定の結果でした。

   Oracleは「該当行を直接書き換える」ので表データ全体のサイズが変わらず、データ数やその位置にも変化がないため、検索時間にも影響がでません。

※注: updateする列「その他」は可変長文字列であり、その列長を大きく増やした場合は行サイズ が大きくなり、結果として使用ブロック数が増加したり、位置が変わる場合があり得ます。このテストでは列長はほとんど変えずにテストを行っています。また HWM(High Water Mark)以後の未使用ブロックも計算に含まれています。

ベンチマーク総論

   数回に渡ってOracleとPostgreSQLを使いベンチマークテストを行ってきましたが、どちらにも得手不得手がある事がご理解いただけたでしょうか?

   登録・削除はPostgreSQL、検索・更新についてはOracleの方に分がありそうです。ただし、繰り返しになりますが結果の数値だけを単純に見るのではなく、「それらの差が何処から生まれてくる物であるのか」という事を知るための情報の1つと考えて下さい。

   このテストの主たる目的は構造の違いから発生するパフォーマンス上の影響を確認するという意味合いが強く、純粋にパフォーマンスの善し悪しを判断するためのものではない事もまたご理解いただけるかと思います。

   ポイントとなるのは、以下の通りです。

  • PostgreSQLが追記型である点
     
  • OracleのREDO、UNDOの構造の複雑さ
     
  • PostgreSQLのVACUUM
     
  • インデックス作成列の選別

   それぞれの良い点悪い点がどういった理由に起因するかがある程度思い描ければ、実システムの構築でも考慮すべき点に気付く事ができ、要件のプライオリティやバランスの中でDBの選定に役立てる助けになる物と考えます。

この記事をシェアしてください

人気記事トップ10

人気記事ランキングをもっと見る