データベースの稼働状況を診断共有するサイト パフォーマンスセラピー
Statspackとは Statspack設定 statspackでの情報収集 statspackレポートの出力 便利スクリプト Oracleチューニング講座


                                  
第8章 手動によりI/Oを分散してみよう
前章「第7章 ストライプ化とは」で説明したようなRAIDが使用できないような場合や、複数のRAIDグループを作成して用途ごとにRAIDグループを使い分ける場合、各ファイルのI/O要件に従って、明示的にファイルを分散する必要があります。
また、RAIDが使用できる場合であっても、アクセス頻度の高いファイルを別のディスクやRAIDグループに分散するとI/O負荷を低減できますので、是非その考え方を身につけましょう。


データ・ファイル
アクセス頻度の高いデータ・ファイルを識別し、そのファイルを別のディスクに分離します。
また、一時表領域のI/O負荷が高い場合は、メモリー上のソート領域をチューニングすることを検討してください。

■ガイドライン
可能な限り以下のガイドラインに従って、分離を行ってください。
・同時アクセスの対象となる表(頻繁に結合されるなど)は同じ記憶装置に配置しない。
・表のデータ・ファイルと索引のデータ・ファイルを分離する。


<<データ・ファイルのI/Oに関連する待機イベント>>
以下にデータ・ファイルのI/Oが問題で発生しやすい待機イベントを示します。
これらのイベントの待機時間が非常に長い場合は、SQLの見直しやデータ・ファイルの分散化を検討してください。

イベント名 説明
db file parallel write DBWRプロセスによる書出しをする際の待機イベント。書込み負荷が問題となっている可能性がある。
db file single write チェックポイント時のヘッダー書込みに関連する待機。一般的にデータ・ファイルの数が非常に多い環境で発生しやすい。
db file scattered read 全表スキャンによる読込みで発生する待機。全表スキャンが実行されるとこの待機は発生する。ただし、待機時間が非常に長い場合は、SQLのアクセス・パス、I/Oに問題がある可能性が高い。
db file sequential read 索引スキャンによる読込みで発生する待機。db file scattered read同様、待機時間が非常に長い場合は、I/Oに問題がある可能性が高い。
free buffer waits データベース・バッファ・キャッシュに空きバッファがない場合に発生する待機。データベース・バッファ・キャッシュが小さすぎるか、DBWRの書込みが遅延していることを示す。
write complete waits サーバー・プロセスがアクセスしようとしたブロックが、DBWRプロセスによって書出し中だったときに発生する待機。DBWRの書出し遅延によって発生する場合がある。チェックポイント中に発生しやすいため、待機が長い場合はチェックポイントの頻度を調整する。

なお、通常の健全なシステムでは、上記の物理読込み待機「db file scattered read」「db file sequential read」がアイドル待機以外で最大待機になりますので、注意してご確認ください。


各ファイルごとのI/O統計は、V$FILESTATビューで確認できます。
以下に主な列を記します。
<主な例>
・FILE# :ファイルの番号
・PHYRDS :実行された物理読取り回数
・PHYWRTS :DBWRが書込みが必要となった回数
・PHYBLKRD :読込まれた物理ブロック数
・PHYBLKWRT :ディスクに書込まれたブロック数
・SINGLEBLKRDS :シングル・ブロックの読取り回数
・READTIM :読取りに費やされた時間
・WRITETIM :書込みに費やされた時間
・SINGLEBLKRDTIM :シングル・ブロックの累積読取り時間
・AVGIOTIM :I/Oに費やされた平均時間
・LSTIOTIM :最新のI/Oに費やされた時間
・MINIOTIM :単一のI/Oに費やされた最小時間
・MAXIORTM :単一読取りに費やされた最大時間
・MAXIOWTM :単一書込みの実行に費やされた最大時間
※上記列での時間に関する情報は全て1/100秒単位です。
  TIMED_STATISTICSパラメータがFALSEの場合は0になりますのでご注意ください。

以下に、V$FILESTATビューの参照例を記します。

例)V$FILESTATビューを参照する。
SQL> SELECT name,phyrds,phyblkrd,phywrts,phyblkwrt
2 FROM v$filestat f,v$datafile d
3 WHERE f.file# = d.file#;

NAME PHYRDS PHYBLKRD PHYWRTS PHYBLKWRT
--------------------------- ------------- --------- ---------- ---------
/oradata/v10/system01.dbf 5350 10657 772 1003
/oradata/v10/undotbs01.dbf 40 40 2476 7353
/oradata/v10/sysaux01.dbf 2790 3606 10037 15161
/oradata/v10/users01.dbf 39734 256562 7 7
/oradata/v10/indx01.dbf 2045 19186 714 4774
※ローカル管理一時表領域の情報を参照したい場合は、V$TEMPFILEとV$TEMPSTATビューを参照します。

オンラインREDOログ・ファイル
REDOログ・ファイルに対するI/O負荷が高い場合は、REDOログ・ファイルをその他のファイルから分離するという対処を行います。
ログ・ライター・プロセスによるREDOログ・ファイルに対する書込みは順次書込みのため、ランダムな書込みを行うデータ・ファイルと同じディスクに配置しないように気をつけましょう。

■ガイドライン
可能な限り以下のガイドラインに従って、分離を行ってください。
 ・すべてのREDOログ・ファイルを他のファイルと分離する。
 ・可用性を考慮し、多重化したファイルを同じディスクに配置しない。


<<REDOログ・ファイルI/Oに関連する待機イベント>>
以下にREDOログ・ファイルのI/Oが問題で発生しやすい待機イベントを示します。
待機時間が非常に長いイベントがあった場合は、REDOログ・ファイルの分離を検討してください。

イベント名 説明
log file paralle write LGWRプロセスのREDOログ・ファイルへの書込みに関する待機。
log file single write REDOログ・ヘッダー書込みに関連する待機。チェックポイント中に発生しやすい。
log file switch completion  ログ・スイッチ時に発生する待機。実際に発生したログ・スイッチの回数よりも待機した回数が多い場合は、I/O負荷が高い可能性がある。
log file sync COMMITまたはROLLBACKするとLGWRプロセスがREDO情報をREDOログ・ファイルにフラッシュする。COMMITまたはROLLBACKを実行するプロセスは、LGWRプロセスが書出し中だった場合、その書出しが完了するまで待機する。COMMITの回数が多すぎるか、I/O負荷が高いのが原因。


アーカイブREDOログ・ファイル
アーカイブ運用をしていてアーカイバ・プロセスが遅い場合は、アーカイバによる読込みとLGWRの書込みが分離されるようにしてI/O競合を防止します。もしくは、より高速なディスクを用意してください。

<<アーカイブREDOログ・ファイルのI/Oに関連する待機イベント>>
以下にアーカイブREDOログ・ファイルのI/Oが問題で発生しやすい待機イベントを記します。

イベント名 説明
log file switch(archiving needed) アーカイブが終了していないに関わらず、まだ必要としているREDOログ・ファイルを再利用しなければならなくなったときに発生する待機。
主に以下の理由が考えられる。
・LGWRとの競合で読込みが低速。
・アーカイブ先のディスクが低速。
・アーカイブ先に空き領域がない。

オンラインREDOログ・ファイルと、アーカイブREDOログ・ファイルを分離していない理構成図が以下の図1になります。


図1:ファイルを分離していないREDOログ・ファイルの構成図

この図から、オンラインREDOログ・ファイルが4グループから構成されており、各グループでミラーリングしていることが分かります。LGWRはログライタープロセスと言って、オンラインREDOログファイルに書き込みを行うバックグラウンド・プロセスです。
そして、オンラインREDOログ・ファイルが循環利用されて、各グループのオンラインREDOログ・ファイルが上書きされる前に、アーカイブREDOログ・ファイルへ読み込みが行われます。ARCnはアーカイバ・プロセスと言って、オンラインREDOログ・ファイルから読み込んだものを、アーカイブREDO・ファイルに書き込みを行う、バックグラウンド・プロセスです。

この処理では、I/O競合が発生してしまう可能性が高いので、発生した場合は以下の図2の、ARCnによる読込みとLGWRによる書込みが同一ディスクにならないような構成、でファイルの分離を行ってください。


図2:ファイルを分離しているREDOログ・ファイルの構成図
【処理の流れ】
①ログ・スイッチによりLGWRがDISK2、4に存在するグループ2にREDOレコードを書込む

②ARCnがアーカイブREDOログ・ファイルを作成するため、DISK1、3に存在するグループ1を読込む

③ARCnがDISK5のアーカイブREDOログ・ファイルに書込む

このようにファイルをディスクに分散させることで、I/O負荷を低減できるので是非覚えて起きましょう。


次章では、Oracleメモリー構造とプロセスについて復習しましょう。


                     第9章 Oracleメモリー構造とプロセスについて復習する