Oracleの一時使用量の監視
Oracleの一時表領域は、従来の表領域と同じ方法で管理されていない可能性があるため、依然として謎であるようです。 エクステントは割り当てられて再使用されるため、領域管理は従来の表領域とは異なります。 そのため、スペースエラーは異なる管理されます。 一時表領域を管理する方法と、DBAが使用できるツールを見てみましょう。
バージョン8.1以降。5Oracleは、エクステントが割り当てられ、必要に応じてセッションに割り当てられる”真の”一時表領域を提供しています。 データベースの実行中にエクステントが削除されることはないため、適切に使用される一時表領域には常に0の”空き”領域があります。 この意味で、’free’は未割り当てを意味し、一時表領域内のすべてが割り当てられますが、それは使用されているという意味ではありません。 これが、従来の領域管理が一時表領域に存在しない理由です。
では、一時表領域はどのように管理されますか? それはいくつかのV$ビューを介して行われます:
V$TEMPFILE V$TEMPSTAT V$TEMP_EXTENT_MAP V$TEMP_EXTENT_POOL V$TEMP_SPACE_HEADER V$TEMPSEG_USAGE(Oracle9i以降にリリース)V$SORT_USAGE(Oracle8.1.7,8.1.6と8.1.5)
V$TEMP_EXTENT_MAP報告書すべてに割り当てられた大きさのテーブルスペース:
SQL> desc v$temp_extent_map Name Null? Type ----------------------------------------- -------- ---------------------------- TABLESPACE_NAME NOT NULL VARCHAR2(30) FILE_ID NUMBER BLOCK_ID NUMBER BYTES NUMBER BLOCKS NUMBER OWNER NUMBER RELATIVE_FNO NUMBER
最も眺めの管理仮表領域はV$TEMP_EXTENT_POOL V$TEMPSEG_USAGE/V$SORT_USAGE. V TEMP TEMP_EXTENT_POOLは、割り当てられたエクステントだけでなく、tempfileによって一時表領域内で使用されているすべてのエクステントについても報告します:
SQL> desc v$temp_extent_pool Name Null? Type ----------------------------------------- -------- ---------------------------- TABLESPACE_NAME NOT NULL VARCHAR2(30) FILE_ID NUMBER EXTENTS_CACHED NUMBER EXTENTS_USED NUMBER BLOCKS_CACHED NUMBER BLOCKS_USED NUMBER BYTES_CACHED NUMBER BYTES_USED NUMBER RELATIVE_FNO NUMBER
V$TEMPSEG_USAGE(または、必要に応じてV$SORT_USAGE)は、すべての表領域に対するユーザー別の一時セグメントの使用状況を示します:
SQL> desc v$tempseg_usage Name Null? Type ----------------------------------------- -------- ---------------------------- USERNAME VARCHAR2(30) USER VARCHAR2(30) SESSION_ADDR RAW(8) SESSION_NUM NUMBER SQLADDR RAW(8) SQLHASH NUMBER SQL_ID VARCHAR2(13) TABLESPACE VARCHAR2(31) CONTENTS VARCHAR2(9) SEGTYPE VARCHAR2(9) SEGFILE# NUMBER SEGBLK# NUMBER EXTENTS NUMBER BLOCKS NUMBER SEGRFNO# NUMBER
一時表領域の使用状況の監視は、時間の経過とともにV$TEMPSEG_USAGE(V$SORT_USAGEが望ましい場合)を照会する簡単なタスクです。:
select segtype, extents, blocksfrom v$tempseg_usagewhere tablespace = 'TEMP';
データベースが一時領域の割り当てエラーを報告していない限り、DBAは実際には何の関係もありません。
データファイルごとに割り当てられ、実際に使用されるエクステントの数を知りたい場合は、次のクエリでかなり便利なレポートが生成されます:
select tablespace_name, file_id, extents_cached extents_allocated, extents_used, bytes_cached/1024/1024 mb_allocated, bytes_used/1024/1024 mb_usedfrom v$temp_extent_pool/
繰り返しになりますが、そのようなレポートに基づいてアクションを実行する必要はありません。
誰があなたの一時スペースを使用していますか、彼らはどのようなクエリを実行していますか、そしてそのスペースのどれだけを消費していますか? それはまた、完了するのはかなり簡単な作業です:
select u.username, s.sql_fulltext, u.segtype, u.extents, u.blocksfrom v$tempseg_usage u, v$sql swhere s.sql_id = u.sql_id;
V TEMP TEMP_SPACE_HEADERビューは、消費された領域と使用可能な領域の詳細なビューを提供します; これは、一時ファイル内の割り当てられた領域と割り当てられていない領域をファイルごとに一覧表示します。 V TEMP TEMP_SPACE_HEADERレポートとV.TEMPSEG_USAGEが提供するものとの間には大きな違いがある可能性があります。
私は一時表領域の適切なサイジングに関して(ウェブ上のどこかから)自分自身を引用します:”一時表領域にはどれくらいのスペースが必要ですか? これは、システムのアクティブさ、並行してアクティブなセッションの数、トランザクションのサイズ、およびディスク容量に依存します。 使用パターン、ユーザー数、およびデータボリュームの変化に応じて、時間の経過とともにTEMP表領域のサイズを増やすことは不名誉ではありません。 また、ORA-01652エラーを発行することによって、一時表領域を増やす必要があることも通知されます(たとえば、表領域TEMPでtemp segmentを128まで拡張できません)。 ORA-01652エラーで報告される数値はバイト単位ではなくブロック単位であるため、db_block_size値を使用して変換して、エラーを生成するトランザクションを完了す このようなルールは、通常、唯一のツールがハンマーになり、すべてのタスクが釘として終わる状況を作成し、多くの場合、あなたが与えられた唯一の”ツール”でその”
DBA_TEMP_FILESは、一時表領域の大きさを示します:
SQL> select tablespace_name, sum(bytes)/1024/1024 MB 2 from dba_temp_files 3 group by tablespace_name 4 /TABLESPACE_NAME MB------------------------------ ----------TEMP 1024SQL>
また、一時表領域に関連付けられているファイルを報告することもできます:
SQL> select tablespace_name, file_name, bytes 2 from dba_temp_files 3 order by tablespace_name, file_name 4 /TABLESPACE_NAME FILE_NAME BYTES--------------- ------------------------------------------------------- ----------TEMP /u2/orawiz/parlopnett/temp01.dbf 1073741824SQL>
TEMP表領域のサイズを小さくしたい、または必要な場合は、データベースをシャットダウンし、制限モードで開き、tempfile(またはtempfiles)のサイズを小さくしてから、データベースをシャットダウンして起動する必要があります。 スペースを追加することは、単純な’alter database tempfile resize;’がスペースを増やすので、ほとんど関与しません。
一時表領域が存在しない場合、または使用できない場合はどうなりますか。 Oracleはこれを表示します:
SQL> select * from mybigtable order by mycoolkey;select * from mybigtable order by mycoolkey*ERROR at line 1:ORA-01129: user's default or temporary tablespace does not exist SQL>
このエラー・メッセージが表示された場合は、一時表領域が存在し、オンラインであるかどうかを確認します。 見つかった問題を修正します(不足している表領域を作成するか、一時ファイルをオンラインに戻します)。
表領域は存在するが、一時ファイルが割り当てられていない場合(データベースのバックアップのリストア/リカバリ後に発生する可能性があります)、Oracle reports:
SQL> select * from mybigtable order by mycoolkey;select * from mybigtable order by mycoolkey*ERROR at line 1:ORA-25153: Temporary Tablespace is Empty SQL>
したがって、タスクは単に「alter temporary tablespace」を発行することです。.. tempfileを追加します。..’表領域を空にしないようにするコマンド。
一時表領域の管理はrocket scienceではありませんが、通常のデータファイルに採用されている”通常の”表領域管理手順とは(時にはかなり)異なります。 “完全な”一時表領域が問題ではないことを知っていると(セグメントが割り当てられてから再利用されることに注意してください)、領域が不足してい つまり、dbaはパスワードのリセットなどの便利なタスクに時間を費やすことができます。
デビッド*フィッツジャレルによるすべての記事を見る