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メモリー構造とプロセスについて復習する