連載
» 2005年05月24日 00時00分 公開

更新/挿入/削除のSQLを高速化する3つの技とは?Oracle SQLチューニング講座(12)(3/3 ページ)

[倉田寛正,株式会社アゲハ]
前のページへ 1|2|3       

パラレルDMLを利用する

 これまで説明した検索処理のチューニング・テクニックでは、パラレルクエリ機能を利用することで、膨大なレコード数を持つ表の検索処理を高速化できました。DML処理についてもパラレルDML機能を使用することで、膨大なレコードの挿入、更新、削除処理を高速化できます。

 Oracle9i R2以前では、パーティション表でのみパラレルDMLを実行することができましたが、Oracle9i R2からは1パーティション内や非パーティション表(通常の表)においても、パラレルDMLが実行できるようになりました。

 DMLをパラレルで処理しますので、パラレルクエリと同様に複数CPUが搭載され、CPU使用率などシステムリソースに余裕がある環境で利用することで効果が期待できます。

図9 パーティション内および通常表でのパラレルDMLの動作 図9 パーティション内および通常表でのパラレルDMLの動作

 パラレルDMLを利用するには以下の手順で設定が必要となります。

1.初期化パラメータ「PARALLEL_MAX_SERVERS」に適切な値を設定する

 設定値などの検討については、「Oracle9iデータ・ウェアハウス・ガイド リリース2(9.2)」を参照してください。

2.パラレルDMLを実行するセッションでパラレルDMLの利用を可能にする

SQL> alter session enable parallel dml;

3.パラレルDMLのSQLを実行する

 以下のSQLではPARALLELヒントを指定していますが、対象表にパラレル度が設定されている場合には、ヒント文の指定は必要ありません。

SQL> DELETE /*+ PARALLEL(lineitem,4) */ FROM lineitem;

 表のパラレル度は以下のように確認できます。

SQL> SELECT table_name,degree
  2  FROM user_tables
  3  WHERE table_name='LINEITEM';
TABLE_NAME                     DEGREE
------------------------------ --------------------
LINEITEM                                1

 DEGREEが「1」の場合、パラレル度が設定されていません。

4.パラレルDMLの実行を確認

 次の動的パフォーマンス・ビューを参照することで、パラレルDMLが実行されたかを確認することができます。

SQL> SELECT * FROM v$pq_sesstat;

 それでは、実際に通常のDELETE処理とパラレルDMLによるDELETE処理を実行し、実行統計と実行計画を比較してみましょう。

図10 通常のDELETE処理の場合の実行統計と実行計画 図10 通常のDELETE処理の場合の実行統計と実行計画
図11 パラレルDMLによるDELETE処理の場合の実行統計と実行計画 図11 パラレルDMLによるDELETE処理の場合の実行統計と実行計画

 図10、図11から、パラレルに処理できるパラレルDMLの処理時間の方が短くなっていることが確認できます。上記例では処理時間にそれほど大きな違いは見られませんが、検証環境のシステムリソースに依存する部分が大きいため、各自の環境で試してみるとよいでしょう。

 INSERT SELECT処理を行う場合には、INSERT処理はパラレルDMLで実行し、かつSELECT処理にもパラレルクエリを組み合わせることで、それぞれの処理がパラレル化され、大幅なパフォーマンス向上が期待できます。


 今回までさまざまなSQLチューニング方法を説明してきましたが、最終回となる次回では、SQLチューニングを行ううえで必要最低限なOracleチューニング項目について説明します。


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。