テンポラリ・セグメントは、インデックス作成、表の結合、集合関数の利用等のソートを伴う処理において、メモリ上で割り当て切れなかったデータに対して、一時的にディスクに格納するための領域です。このセグメントを格納するための表領域が一時表領域です。大きな領域を必要としないソート処理はパラメータsort_area_sizeによってメモリ上に確保された領域で処理され、それ以上についてはディスク上の一時表領域で処理されます。
Oracle上で以下の処理を行う時にテンポラリ・セグメントが使用される可能性があります。
ソートを伴う処理が発生したとき
DISTINCT、UNION、MINUS、GROUP BY、ORDER BY など
INDEX作成
SORT/MARGE・JOIN
表をJOINするSQL文の実行計画が「HASH_JOIN」を選択したとき
従って、メモリの許す範囲において、できるだけsort_area_sizeを大きく設定し、エクステントサイズの設定については、sort_area_sizeの整数倍に設定すれば効率的です。
5.5.1.一時表領域の必要性
Oracleでは、テンポラリ・セグメントを格納する領域として、一時表領域を作成することを推奨しています。一時表領域はユーザ作成時に明示的に定義します。ここで定義をしない場合は、SYSTEM表領域がテンポラリ・セグメントを格納する領域となります。SYSTEM表領域は、データディクショナリで使用される領域で、これ以外の用途に使用するべきではありません。
ユーザ表領域やインデックス表領域内に提示することも可能ですが、フラグメンテーションの原因となるため定義しません。
ユーザ作成時の一時表領域の定義例 SVRMGR>create user SCOTT identified by TIGER
2> default tablespace USR_DATA
3>temporary tablespace TMP_DATA ;
5.5.2.一時表領域の見積もり
一時表領域の必要容量を正確に算出することは困難です。指針として、最大表のサイズの2倍とします。
5.5.3.一時表領域の作成
一時表領域を作成するに当たって、必要となる知識を示します。
テンポラリ・セグメントは削除されない。*1
1つのエクステントは、一人のユーザが占有します。
エクステントは自動的に全て同じ値になる。*2
エクステントの管理はSGAで行われる。
MAXEXTENTSはUNLIMITEDとする。
1 Oracle7 R7.3.x以前のバージョンでは、テンポラリ・セグメントは自動的に作成・拡張・削除が行われていました。Oracle8ではソート処理が終了して必要なくなっても削除されません。よって、全てのユーザで共有されます。
2 エクステントサイズ「INITIAL」の値は使用されず、「NEXT」の値のみが採用されます。「PCTINCREASE」は0になります。
SVRMGR>create tablespace TMP_DATA
2>datafile ‘/opt/oracle/temp/tmp01.dbf’ size 10M
3>default storage (initial 1M next 1M maxextents unlimited)
4>temporary;
一時表領域の作成例
注意として、網掛け部「temporary」を必ず指定してください。Oracleで一時表領域という認識ができません。作成後は次のSQLで、「TEMPORARY」と表示されることを必ず確認してください。
SVRMGR>select tablespace_name, contents from dba_tablespaces
2>where tablespace_name = ‘TMP_DATA’;
一時表領域モードの確認
「PARMANENT」と表示された場合は、次のSQL文で修正してください。
SVRMGR>alter tablespace TMP_DATA temporary;
最終更新:2008年11月15日 22:11