本連載では、Oracleデータベースのパフォーマンス・チューニングの中から、特にSQLのチューニングに注目して、実践レベルの手法を解説する。読者はOracleデータベースのアーキテクチャを理解し、運用管理の実務経験を積んでいることが望ましい。対象とするバージョンは現状で広く使われているOracle9iの機能を基本とするが、Oracle 10gで有効な情報も随時紹介していく。(編集局)
前回「更新/挿入/削除のSQLを高速化する3つの技とは?」では、更新処理のSQLチューニング・テクニックについて説明しましたが、特に更新処理に関しては、データベース側の設定にも注意すべき点があります。最終回となる今回はSQLから少し離れて、更新処理のチューニングを行う際に必要となる、SQL以外の部分でのチューニング・ポイントについて説明します。
更新処理では、実際に更新するデータや索引が格納されている表領域以外に、オンラインREDOログ・ファイル、UNDO表領域にも多くのI/Oが発生します。ディスクI/Oがネックになっている場合、I/Oが集中しているファイルを調査し、これらを可能な限り異なるディスクに分散するようにします。
性能の観点はもちろん、耐障害性の観点からも、オンラインREDOログ・ファイルは、可能な限り占有できるディスクを割り当てることが推奨されます。ディスクを専有することが難しい場合、可能な限り、I/O発生頻度が低く、Oracleのデータ・ファイルが配置されていないディスクに配置するようにしてください。
I/Oの発生状況は、OSコマンド、およびOracleのデータディクショナリで確認できます。Windowsでは管理ツールにある「パフォーマンス」、LinuxやUNIXではsar、iostatコマンドなどを利用して、I/Oが特定のディスクに集中していないかを確認します。
特定のディスクにI/Oが集中している場合、動的パフォーマンスビューの「V$FILESTAT」や「V$SYSSTAT」の「redo size」列を確認し、どのファイルに多くのI/Oが発生しているかを調査します。これらの情報を基に、ホットファイルを見つけ出し、分散配置を検討してください(なお、データ・ファイル、オンラインREDOログ・ファイルを移動させる場合、SQLの実行が必要になりますので、くれぐれもデータベースの稼働中にファイルだけ移動するなどを行わないようにしてください)。
大量更新処理のパフォーマンス・チューニングを行う場合には、オンラインREDOログ・ファイルのサイズと個数に注意が必要です。データベースに対する変更情報は、共有メモリ上のログ・バッファに書き込まれた後、ログ・バッファからオンラインREDOログ・ファイルへ書き込みが行われます。書き込んでいたカレントのオンラインREDOログ・ファイルが満杯になるとログ・スイッチが発生します(図1)。
ログ・スイッチでは、チェックポイント注1の発生やオンラインREDOログ・ファイルの切り替えなどの処理が行われます。ログ・スイッチが発生した際、再利用しようとしたREDOログに含まれるチェックポイント処理が完了していないと、ログ・スイッチは待ち状態となり、アラートログ・ファイルに以下のメッセージが出力されます。
Thread 1 cannot allocate new log, sequence 8829 Checkpoint not complete
アラートログ・ファイルに上記のメッセージが頻発している場合、トランザクション量に対して、オンラインREDOログ・ファイルのサイズ、または個数が不足していることを示しています。
注1:チェックポイント
チェックポイントとはメモリ上の更新済みデータ(ダーティブロック)をディスク上のデータ・ファイルへ反映する処理です。反映処理完了後には、制御ファイルと各データ・ファイル・ヘッダの更新処理も行います。チェックポイントの発生頻度は、初期化パラメータの設定などによっても変わってきます。
Copyright © ITmedia, Inc. All Rights Reserved.