INSERT文のSQLチューニング方法

どうも、たけし@アラサーのシステムエンジニアです。

久しぶりにORACLEのこと書きます。
今回はSQL、INSERT文のチューニング方法のご紹介です。

INSERT文をチューニングする方法はある程度限られているかなと思います。

>>SQLが突然遅くなる原因と対応方法

>>ORACLEチューニング関連記事の一覧

ダイレクト・パス・インサート

聞きなれている方も多いと思います。
バッファキャッシュを経由せずにテーブルに直接書き込む方法です。
ORACLEでINSERT文を発行すると、通常は一旦メモリ、つまりSGAの中のバッファキャッシュ上に一旦吐き出されます。
その後、実際にデータがテーブルに登録されます。

しかし、ダイレクト・パス・インサートを行うことで、バッファキャッシュを経由せずに直接書き込めます。
なので通常のINSERTよりも格段に速くなります。

INSERT /*+ APPEND*/ INTO TABLE_A SELECT ~みたいにヒントを追加することで実装できます。
※VALUESを使う場合は、INSERT /*+ APPEND_VALUES*/ INTO SELECT ~

しかし、制約もあります。
一番は、INSERT先のテーブルをロックしてしまうことです。
並走できなくなるので要注意してください。

nologging

INSERT INTO nologging TABLE_A SELECT~とすることで、REDOログ(更新ログ)を書き出さなくなります。
これもだいぶ速くなります。

更新ログによるデータ復元などできなくなるので要注意。

パラレル実行

最近はデータベースもハイスペックです。
リソースに余裕があるのであれば、ぜひ活用してください。
セッション単位にパラレルするか、SQLにヒントでパラレル記述することが出来ます。
DML文でもパラレル実行出来ます。

・セッション単位
ALTER SESSION FORCE PARALLEL DML PARALLEL 4 ;

・ヒント
INSERT /*+ PRALLEL(4) ENABLE_PARALLEL_DML*/ INTO TABLE_A SELECT ~

INSERT先のテーブルのパラレル化

パラレル実行との相性は良いと思います。
使っていくと結構便利です。

SELECT文のチューニング

INSERT INTO SELECT ~のような場合、INSERT自体の速度だけでなく、もちろんSELECT文もきちんとチューニングしておきましょう。
SELECT文が遅くて処理が終わらないというケースを結構見かけます。

SELECT文のSQLチューニング方法





【SQLでお困りの方にオススメ】
■SQLが遅くなる原因
・SQLが突然遅くなる原因と対応方法
・OracleSQLのレスポンスが遅い原因3つ
・JOINを使って表結合するとSQLが遅い!?
・SQLがパラレル実行されない原因

■SQLチューニングの基礎知識
・ORACLE SQLのヒントとは
・ORACLEのオプティマイザと実行計画について
・ORACLEのテーブルやインデックスの「統計情報」とは

■SQLチューニングの方法
・SELECT文のSQLチューニング方法
・OracleExadataでのSQLチューニング方法
・SLECT文が遅いときのインデックス作成によるチューニング方法
・INSERT文のSQLチューニング方法
・Update文が遅いときのチューニング方法
・Delete文が遅いときのチューニング方法
・IN句をEXISTS句に置き換えするチューニング方法
・OR句の置き換えによるチューニング方法
・IN句の置き換えによるチューニング方法
・テーブルアクセスフルスキャンを無くしてチューニングする方法
・SQLでGROUP BYが遅いときのチューニング方法
・SQLのソート処理が遅い場合のチューニング方法

■表や索引の断片化対策
・プロが教えるORACLEの表や索引の断片化解消の見積り方法
・ORACLE表の断片化を解消する3つの方法

■SQLのチューニングの補足情報
・ORACLE SQLヒントの書き方
・SQLに複数のヒントの書き方
・OracleSQLに実装すべき3つのSQLヒント
・ORACLE表の統計情報取得日の確認方法
・「統計情報が古い」とはどういうことか
・ORACLE表の統計情報の取得方法

【自己学習したい方にオススメ】
・自宅で勉強用にORACLEデータベースを無償でダウンロードし構築する方法
・OracleMasterGold12cに一ヵ月で合格した勉強方法
・OracleMasterExpertパフォーマンス&チューニングに一ヵ月で合格した勉強方法
・手に職がない人はIT業界へ、オススメ資格と勉強方法
・OracleDBのチューニング勉強方法
・OraclePL/SQL勉強方法