Oracle その他

一時表領域のリアルタイム(ソート中)の使用率の確認方法|Oracle SQLPlus

ソート中にどれだけの一時表領域が使われているのかを見てみたい!

ソートの実行は一時表領域が使用され、ソート終了後にその領域は解放される。

ふた通りの方法で確認してみよう。

方法1:使用率(%)をSQLPLUSから確認する

ソート中の一時表領域の使用率は以下のSQLで確認することができる。

実行例

SQL> 
SELECT d.tablespace_name "Name",
TO_CHAR(NVL(a.bytes / 1024 / 1024, 0),'99,999,990.900') "Size (M)",
TO_CHAR(NVL(t.hwm, 0)/1024/1024,'99999999.999')  "HWM (M)",
TO_CHAR(NVL(t.hwm / a.bytes * 100, 0), '990.00') "HWM % " ,
TO_CHAR(NVL(t.bytes/1024/1024, 0),'99999999.999') "Using (M)",
TO_CHAR(NVL(t.bytes / a.bytes * 100, 0), '990.00') "Using %"
FROM sys.dba_tablespaces d,
(select tablespace_name, sum(bytes) bytes from dba_temp_files group by tablespace_name) a,
(select tablespace_name, sum(bytes_cached) hwm, sum(bytes_used) bytes from v$temp_extent_pool group by tablespace_name) t
WHERE d.tablespace_name = a.tablespace_name(+)
AND d.tablespace_name = t.tablespace_name(+)
AND d.extent_management like 'LOCAL'
AND d.contents like 'TEMPORARY';

Name                           Size (M)        HWM (M)       HWM %   Using (M)     Using %
------------------------------ --------------- ------------- ------- ------------- -------
TEMP                                 1,763.000      1762.000   99.94          .000    0.00

方法2:エクステント・ブロック単位で確認する

もっと細かく、エクステントやブロック単位で一時表領域がリアルタイムでどれだけ使われているかは、以下のSQLで確認することができる。

実行例

SQL> 
SELECT S.USERNAME, U."USER", U.TABLESPACE, U.CONTENTS, U.EXTENTS, 
U.BLOCKS FROM V$SESSION S, V$SORT_USAGE U  WHERE S.SADDR=U.SESSION_ADDR;
                                    
レコードが選択されませんでした。 

実際のリアルタイムの動き

セッションを二つ用意して、1つのセッションでソートを実行し、もう1つのセッションで前述したSQLを使ってリアルタイムで数値が増えていくのを確認してみよう。

セッション1:一時表領域を使用させるようなソート処理を実行

SQL> 
select emp1.* from 
emp emp1
,emp emp2
,emp emp3
,emp emp4
,emp emp5
,emp emp6
,emp emp7
order by 1,2,3,4,5;
:

セッション2:一時表領域が使用される動きをリアルタイムで確認

SQL>  
SELECT S.USERNAME, U."USER", U.TABLESPACE, U.CONTENTS, U.EXTENTS,  
U.BLOCKS FROM V$SESSION S, V$SORT_USAGE U  WHERE S.SADDR=U.SESSION_ADDR; 
               
USERNAME     USER   TABLESPACE   CONTENTS  EXTENTS    BLOCKS
----------- ------- ----------- --------- ---------- ----------
SCOTT     SCOTT   TEMP      TEMPORARY  98       12544
                                            ^^^^^      ^^^^^

SQL> 
SELECT S.USERNAME, U."USER", U.TABLESPACE, U.CONTENTS, U.EXTENTS, 
U.BLOCKS FROM V$SESSION S, V$SORT_USAGE U  WHERE S.SADDR=U.SESSION_ADDR;
                
USERNAME     USER   TABLESPACE  CONTENTS  EXTENTS    BLOCKS
----------- ------- ----------- --------- ---------- ----------
SCOTT      SCOTT  TEMP      TEMPORARY  611      78208
                                           ^^^^^    ^^^^^     

SQL>  
SELECT S.USERNAME, U."USER", U.TABLESPACE, U.CONTENTS, U.EXTENTS, 
U.BLOCKS FROM V$SESSION S, V$SORT_USAGE U  WHERE S.SADDR=U.SESSION_ADDR;
			
USERNAME     USER   TABLESPACE   CONTENTS  EXTENTS    BLOCKS
----------- ------- ----------- --------- ---------- ----------
 SCOTT	     SCOTT  TEMP     TEMPORARY   1756      224768
                                            ^^^^^      ^^^^^									

SQL>  
SELECT S.USERNAME, U."USER", U.TABLESPACE, U.CONTENTS, U.EXTENTS, 
U.BLOCKS FROM V$SESSION S, V$SORT_USAGE U  WHERE S.SADDR=U.SESSION_ADDR;

レコードが選択されませんでした。

ソートが終了するとレコードが選択されなくなる = 領域が解放されている

この記事が役に立ったという方は
ボタンをポチッとしてくれたら喜びます

-Oracle, その他
-