自分用のメモです。ablog 全般に言えることですが、間違いだらけなので参考にしないで下さいw
[STATSPACK report for -> Sessions]
[概要]
- スナップショット取得時のセッション数を見ることができる。
- 平常時のスナップショットを取得しておき、負荷が高いときやレスポンス低下時などに比較する。
- 想定と大きく違わないか確認する。
[Load Profile]
[概要]
- システムの特性・傾向を見ることができる。
- 平常時のスナップショットを取得しておき、負荷が高いときやレスポンス低下時などに比較する。
[Instance Efficiency Percentages]
[概要]
[見方]
- Buffer Hit%: 必要なデータがデータベース・バッファ・キャッシュ上にあった割合。
- 必要なデータがデータベース・バッファ・キャッシュになかった場合、割合が小さくなる。
- データベース・バッファ・キャッシュが小さい場合は大きくする。
- インデックスを使わない非効率なSQLが全表走査を行ったことが原因でデータベース・バッファ・キャッシュからデータがはじきとばされた可能性がある。その場合はインデックスを追加作成するなどする。
- Library Hit %: 必要なSQL、PL/SQLがライブラリ・キャッシュにあった割合。
- Soft Parse %: 全ての解析のうち再利用可能なものの割合。
- In-Memory Sort%: ソートがメモリ内で行われた割合。
- Latch Hit%: 全てのラッチのヒット率。
- Parse CPU to Parse Elapsed %: 解析CPU時間/ 解析の合計時間。
- Execute to Parse%: SQL実行に対し解析が行われなかった割合。
- %non-parse CPU: 解析以外で使用されたCPU時間の割合。
- Buffer Nowait%: バッファに要求を出したときに、即座に使用可能だった割合。
- Redo Nowait%: redo logに要求を出したときに、即座に使用可能だった割合。
[Top 5 Timed Events]
[概要]
- 総待ち時間(Wait Time)の長い待機イベントトップ5が表示される。
- サーバ・プロセスとバックグラウンド・プロセスの両方が表示される。
[見方]
[イベントの種類]
- db file scattered read
- db file sequentical read
- buffer busy waits
- 同じブロックに対して同時にアクセス要求があった場合、後から要求したプロセスは瞬間的に待ちになる。
- Segments by Buffer Busy Waits からホットになっているオブジェクトを特定する。
- セグメントヘッダの空きリスト競合が発生している場合は、ASSM(自動セグメント領域管理)を利用する。
- 昇順インデックスが原因の場合、逆キー索引やパーティションなどでホットブロックを分散させる。
- PCTFREE を調節して1ブロックに格納する行数を減らす。
- 手動UNDO管理を使用していて、UNDOヘッダ・UNDOブロックがホットな場合は自動UNDO管理に変更する。
- free buffer waits
- サーバ・プロセスがバッファの空き領域を待つステータス。
- File IO Stats から書込みが多いデータファイルを確認する。
- OS統計から書込み時間が妥当かを確認する。遅い場合はI/Oのチューニングが必要。
- キャッシュヒット率(buffer hit %)が低い場合は、データベース・バッファ・キャッシュを大きくすることを検討する。
- チェックポイントの頻度を増やす。
- DBWRの数がデータベース・バッファ・キャッシュのサイズの割には少ない場合は増やす。
- db file paralell write
- File IO Stats から書込みが多いデータファイルを確認する。
- OS統計から書込み時間が妥当かを確認する。遅い場合はI/Oのチューニングが必要。
- log file sync / log file parallel write / log buffer space
- commit や rollback に伴う LGWR の書込み遅延が原因
- OS統計から書込み時間が妥当かを確認する。遅い場合はI/Oのチューニングが必要。
- バッチ処理などで commit のタイミングを変更できる場合は変更する。待機時間が短く回数が多い場合は、commit 頻度をさげる。
- log buffer space の場合は、log buffer サイズが適切でない可能性がある。
- enq: ST - contention
- 動的な領域割り当てが主な原因。
- ローカル管理表領域を使用する。
- enq: HW - contention
- セグメントの HWM を越える領域の割り当てが原因。
- エクステントの手動割り当て。
- enq: SQ - contention
- 順序を生成する頻度が高いことが原因。
- 順序のキャッシュ数を増やす。
- enq: TM - contention
- 制約される列が索引付けされない場合の外部キー制約に関係している傾向がある。
- 外部キー列を索引付けする。
- enq: TX - row lock contention (mode: 6)
- 行レベルロック。
- アプリケーションの変更。
- enq: TX - allocate ITL entry (mode: 4)
- ITL スロットの待機。
- INITTRANS、MAXTRANS を変更し ITL の個数を増やす。
- enq: TX - index contention (mode: 4)
- 索引ブロック分割待ち。
- 逆キー索引やパーティションなどで分割の影響を受けるセッションを減らす。
- enq: TX - row lock contention (mode: 4)
- ビットマップ索引の更新待ち。
- 更新頻度が高い表にビットマップ索引を使用しない。
- Latch Free
- CPUリソースが不足していないか確認する。
- Latch Activity からどの Latch で待機が多いか確認する。
- latch: cache buffer chains
- ホットブロックが存在することが原因。
- 採番表などの存在→順序を使用する。
- 索引リーフブロックの競合→logical reads が多く索引のサイズが小さいものがあるか調べる。
- latch: cache buffers lru chai
- 多くの全表検索、誤った索引の使用、DBWRの遅延などが原因
- latch: cache buffer chains
- latch: library cache
[SQL ordered by ...]
[概要]
[参考]
http://www.oracle.co.jp/iSeminars/070123_1600/doc/Statspack_Tips.pdf
http://perfopy.ashisuto.co.jp/samples/atmarkit/atmarkit_part_shorttime5.html
[関連]
STATSPACK を使ってみる - ablog
STATSPACK でスナップショットを自動収集する方法 - ablog
STATSPACK 関連の資料 - ablog
Oracleのデータブロックの空き領域管理 - ablog
パフォーマンステストでの STATSPACK の取得について - ablog
STATSPACKレポートを全部一気に出力するスクリプト - ablog
v$sysstat の table scans (long tables) と table scans (short tables) ってなんだ? - ablog