|
|
徹底比較!! Oracle & PostgreSQL
|
第5回:PostgreSQLの適用範囲を考える 〜 データ登録のパフォーマンス
著者:ミラクル・リナックス 高橋 強 2005/5/23
|
|
|
前のページ 1 2 3
|
|
copyコマンドによるデータ登録
|
次にPostgreSQLでcopy … fromコマンドを使用した場合の結果を示します。
|
図3:PostgreSQLでcopyコマンド使用時の比較
|
PostgreSQLでpsqlのcopy … fromコマンドを用いた場合、insertによるテスト時の30%程度の実行時間で登録できました。しかしOracleのSQL*Loaderほどの効果はありませんでした。
|
SQL*Loaderとcopy … fromコマンドの比較
|
単純なinsert処理の繰り返しではPostgreSQLの方が良い結果でしたが、SQL*Loaderとcopy … fromコマンドを比較した場合では、SQL*Loaderの方がcopy … fromコマンドの30%程度の実行時間であり、さらにdirectモードならば6%程度でしかありませんでした。
|
図4:SQL*Loaderとcopy … fromコマンドの速度比較
|
|
SQL*Loaderとcopyコマンド
SQL*LoaderはOracleのデータローディング専用のコマンドとして用意されているもので、CSVなどのテキストデータを読み込んで、SQLのinsert文へ書き換えることなくOracleのデータとして登録する事ができます。
一方のPostgreSQLのcopyコマンドはpsqlに実装されたひとつのコマンドであり、SQL*Loader同様、外部のテキストファイルを読み込んでinsert文へ書き換えることなく、データの登録を実現します。
元データのフォーマットや登録方法などの自由度はSQL*Loaderの方が多彩で、directモードなど機能面でも充実しています。その分設定も必要で、手軽に使えるという点ではcopyコマンドの方に分があります。
|
|
まとめ
|
総じて、insert文による単純なデータの登録速度のみでいえば、PostgreSQLの方が高速であるという結果でした。その理由はデータの格納時に発生するオーバヘッドが小さい事によると考えられます。今回のテストのような単純な操作の場合、より顕著に現れていますが、データを登録する表が新規の表である事もそのオーバヘッドを短縮できた理由のひとつであるといえます。
これまで説明してきたように、Oracleの方がPostgreSQLに比べるとトランザクション処理やロールバック情報の生成、データの格納方法などにおいて複雑な処理を必要とします。それらのI/Oが一箇所に配置される環境であった事も影響し、思っていた以上の差となって結果に現れています。
OracleのSQL*Loader(特にdirectモード)が最も高速であった理由も同じで、処理上のオーバヘッドが発生する部分を省略する事で、より高速化を図っています。処理を省いた分、機能的には制限される部分もあり、このあたりは使用方法との兼ね合いで可否の判断が必要です。
また、データがより大量になった場合や、ある程度荒れた(フラグメントの進んだ)状態となった表へのinsert処理、複数の表に渡るinsert処理の場合など、この優位性がどの程度まで保てるかは少々疑問が残るところではありますが、単独データの追加というパターンで見た場合、insert処理においてはOracleよりもPostgreSQLの方が高速であったという結果でした。
次回はデータ検索についてのテストを行います。
|
前のページ 1 2 3
|
|
|
|
著者プロフィール
ミラクル・リナックス株式会社 高橋 強
1993年某SIベンダへ入社後、Oracle、DB関連のコンサルティング、チューニング、社内案件の技術支援などを10年ほど担当。2004年ミラクル・リナックス株式会社へ入社。
|
|
|
|