データベース-OracleとあるOracle関連のトラブルに出くわし、一時表領域について学んだのでメモ。Silver取っていようが、普段の仕事でDB周り触ってないから基礎知識が全然ありませんでしたという話。そもそも一時表領域とはOracleの表領域には3つの種類がある。SORT・JOIN・UNION等で中間結果を保存するために使われる。これはPGA(=メモリ)上ではソートエリアが足りなかった場合。PGAにおけるソート領域は初期化パラメータのSORT_AREA_SIZEで指定されている。一時表領域はスパースファイルである。スパースファイルとは、「ファイルサイズと実際のディスク使用量が異なる」ファイルのこと。以下のように表領域を作成したとする。undo01.dbfとまぁこんな感じ。/db/admin/dbf/undo01.dbf永続表領域のSYSAUX、SYSTEM、UNDO表領域のUNDO1は定義時の最大サイズと一致するが、一時表領域であるTEMP1が一致しない。TEMPのサイズは「現在の一時表領域の使用サイズ」と一致する!つまり一時表領域は作成当初は実際のディスク使用量が0で、使われた分だけディスクの空き領域を埋めていく。Linuxと過ごす一時表領域の中身と使われ方。そのままで、定義してから一度も利用していない部分。表領域ができてから初めてディスクソートが行われるとここを使うことになる。ソートを実行中、そのブロックは使用中領域にとなる。ソートで500Mのディスク領域が必要なら、500Mが使用中領域になる。同時に一時表領域のデータファイルサイズが500Mとなる。ソートが終わると使用中領域は開放され、再利用可能領域となる。再利用可能領域は、「ディスクスペースとして取ってはいるけど、まだ誰もソートしてない(=未使用)領域」となる。先ほど例に挙げた500Mのソートが終わった後に、200Mのソート領域が必要になったとするとそれは500Mの再利用可能領域から200Mを使用中領域にしてソートを行う。終われば当然開放し、元通り500Mの再利用可能領域に戻る。そのためデータファイルサイズは変わらない。次にデータファイルサイズが広がるタイミングは、500Mを超えるソート領域が必要になった時。表領域の使用量=過去必要になったソート領域の最大値=再利用可能領域(+未使用から使用中となった領域)という感じ。一時表領域の使用状況を確認する一時表領域の使用状況はV$SORT_SEGMENTテーブルで確認することができる。当然ながら使用中領域は実際にソートが走っている間しか増えないため、SQL実行中に定期的に監視する必要がある。この他V$SORT_SEGMENTを見ることで、大量のディスクソートを行っているSQLを特定することができる。はてなブログPro学んだ技術まとめるはずが、仙台のことや日常のことを綴っているブログ。(1)スポンサーリンクはてなブログをはじめよう!WorldWorldWorldさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。