無料の「Oracle Database XE」で高速バッチ処理:活用のポイント

兒玉敏幸(101)
2008-08-15 16:09:01
  • このエントリーをはてなブックマークに追加

1-2. 一時表の活用

 前回の説明でDDLを活用しましょうと説明しましたが、永続表が中間テーブルとして利用されると、パフォーマンスが心配になったり、テーブル名を固定とすると同じ処理を並列実行することができなくなるので、排他制御をする必要があったりします。

 実行時に一意となるように動的にテーブル名を設定するようにすることで対応することは可能ですが、テーブル名を決定するだけのためにロジックが複雑になるのはムダです。

 そこで有効な機能が一時表です。

 Oracleデータベースの一時表は、トランザクションまたはセッションの期間のみで有効なデータが保持される仕組みです。

 セッション固有の一時表は該当セッションのユーザーだけがアクセス可能なデータが保持され、複数のユーザーが同一の一時表にアクセスしてもお互いのデータにはアクセスできないため、テーブル名を一意とする必要がなくなります。

 したがって、並列実行の可能性があるバッチ処理の中間テーブルとしてはとても効果的です。

 さらに一時表はパフォーマンス面でも効果があります。

 一時表は一時表領域に作成され、データはセッション専用であるためDMLロックを取得する必要もなく、REDOログも生成されないためコストを非常に低くできます。また、セッション終了時には自動的にデータが削除されますが、実際には再利用可能な一時表領域として領域の開放を行うだけです。

 このようにデータベースシステムに対する負荷が軽いため、バッチ処理全体のパフォーマンス向上が期待できます。

 しかし、中間テーブルにあるデータを他のセッションから確認できないためエラー終了した場合は、逆に欠点となります。

 エラーの原因を調べようとすると、中間テーブルにはデータも残っていませんので問題を確認することができません。一時表には利点も多いですが、バッチ処理の開発フェーズではデバッグのことを考慮すると不向きです。

 開発当初は永続表で実装し、テストを十分にして、簡単に一時表に切り替えられるような仕組みを用意することで、その欠点を補えます。

このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]