これまで説明した検索処理のチューニング・テクニックでは、パラレルクエリ機能を利用することで、膨大なレコード数を持つ表の検索処理を高速化できました。DML処理についてもパラレルDML機能を使用することで、膨大なレコードの挿入、更新、削除処理を高速化できます。
Oracle9i R2以前では、パーティション表でのみパラレルDMLを実行することができましたが、Oracle9i R2からは1パーティション内や非パーティション表(通常の表)においても、パラレルDMLが実行できるようになりました。
DMLをパラレルで処理しますので、パラレルクエリと同様に複数CPUが搭載され、CPU使用率などシステムリソースに余裕がある環境で利用することで効果が期待できます。
パラレル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、図11から、パラレルに処理できるパラレルDMLの処理時間の方が短くなっていることが確認できます。上記例では処理時間にそれほど大きな違いは見られませんが、検証環境のシステムリソースに依存する部分が大きいため、各自の環境で試してみるとよいでしょう。
INSERT SELECT処理を行う場合には、INSERT処理はパラレルDMLで実行し、かつSELECT処理にもパラレルクエリを組み合わせることで、それぞれの処理がパラレル化され、大幅なパフォーマンス向上が期待できます。
今回までさまざまなSQLチューニング方法を説明してきましたが、最終回となる次回では、SQLチューニングを行ううえで必要最低限なOracleチューニング項目について説明します。
Copyright © ITmedia, Inc. All Rights Reserved.