ちゃむ前回は、主に、メモリー上でソートを行なう際、どこで行われるかを中心に説明した。今回は、主にdiskでソートを行なう場合の一時表領域に関して説明する。Oracleのソートアルゴリズムを考えた上で設定上の大きな要因は2つある。初期化パラメータのSORT_AREA_SIZEはメモリー上でソート処理する際のMAXサイズを決めるものである。表領域上でソート処理を行なうことになる。STORAGE句で決まる。PCTINCREASEなどのエクステントサイズは指定するので、問題になることはない。PCTINCREASEで指定したエクステントサイズは、そのまま一時セグメントの大きさになる。STORAGEが非常に重要である。PCTINCREASE=0にする。この指針の正当性に関しては、別の機会に検証する。Oracle7.3以降の機能である専用一時表領域により、一時セグメント内のエクステントの割当て、解放などを何度も行なう必要がなくなる。領域は、永続表領域に作成する。この永続表領域は、TABLEとかINDEXなどのオブジェクトを作成するときと同様、普通の表領域である。その表領域にTABLEなどを作成することはできない。UNLIMITED);その一時表領域にテーブルを作成した様子。問題なくテーブルを作成できる。USERS;ユーザーが作成されました。権限付与が成功しました。権限付与が成功しました。CHAMU1/CHAMU1接続されました。DUAL;表が作成されました。その専用一時表領域にテーブルを作成した様子。ORA-2195発生。UNLIMITED)TEMPORARY;その一時表領域にテーブルを作成した様子。USERS;ユーザーが作成されました。CHAMU2;権限付与が成功しました。CHAMU2;権限付与が成功しました。CHAMU2/CHAMU2接続されました。エラーが発生しました。PERMANENTオブジェクトがTEMPORARY表領域に作成されようとしました。解放のタイミングである。<一時表領域>ソート処理のたびに一時セグメントのエクステントの割り当て、解放が行われる。ソートが行われている一時セグメントは、ソート処理を行なっているプロセスごとに確保される。(一時セグメントが複数存在することがある。当て、解放が行なわれる。1.ソート処理に必要な一時セグメントを空ブロックから確保する。2.ソート処理終了後、一時セグメントを解放して、空ブロックとする。<専用一時表領域>ソート処理のたびに一時セグメントのエクステントの割り当て、解放が行われるわけではない。動してから初めてのディスクソート処理が起きたときと、それ以降に、今までよりも大きいディスクソートの領域が必要になったときだけである。解放するタイミングは、OracleインスタンスをSHUTDOWNするときのみである。一時セグメントは、一度割り当てられると、SHUTDOWNするまでは空ブロックとして解放されることはないのである。当て、解放を行なう内部的な領域管理は少ないのである。一時セグメントは、専用一時表領域にたった一つである。この単一セグメントが複数プロセスからのディスクソート処理を一手に引き受ける。当て、解放が行なわれる。時セグメントのうちで他のプロセスが現在使用していないエクステントより大きければ)、その分の領域を空ブロックから新たに一時セグメントに割り当てる。小さければ、空ブロックからの新たな一時表領域の割り当てはしない。2.OracleインスタンスをSHUTDOWNするまでは、ソート処理終了後も一時セグメントを解放しない。次回、このソート処理により、一時セグメントが実際にエクステントの割当て、解放を行なう様子を見てみよう。reserved.トップページ企業概要プライバシーポリシ。