如何在 Oracle 中監控臨時表空間使用情況?


問題

您想監控 Oracle 中的臨時表空間使用情況。

解決方案

我們可以使用以下查詢找出臨時表空間中已用和可用空間。

我們將從識別臨時表空間名稱開始。

示例

SELECT tablespace_name FROM dba_tablespaces WHERE contents = 'TEMPORARY';

輸出

TEMP

接下來,我們將使用以下 SQL 來識別臨時表空間中已用和可用空間。

示例

SELECT * FROM   (SELECT a.tablespace_name,     SUM(a.bytes/1024/1024) allocated_mb   FROM dba_temp_files a   WHERE a.tablespace_name = 'TEMP'   GROUP BY a.tablespace_name   ) x,   (SELECT SUM(b.bytes_used/1024/1024) used_mb,     SUM(b.bytes_free      /1024/1024) free_mb   FROM v$temp_space_header b   WHERE b.tablespace_name = 'TEMP'   GROUP BY b.tablespace_name   );

輸出

TEMP    4600    4568    32

我們將識別高臨時表空間使用率背後的使用者和 SQL 語句。

示例

SELECT s.sid   || ','   || s.serial# sid_serial,   s.username,   o.blocks * t.block_size / 1024 / 1024 mb_used,   o.tablespace,   o.sqladdr address,   h.hash_value,   h.sql_text FROM v$sort_usage o,   v$session s,   v$sqlarea h,   dba_tablespaces t WHERE o.session_addr = s.saddr AND o.sqladdr        = h.address (+) AND o.tablespace     = t.tablespace_name ORDER BY s.sid;

我們可以使用以下查詢找出哪些會話正在臨時表空間中使用空間。

示例

SELECT s.sid   || ','   || s.serial# sid_serial,   s.username,   s.osuser,   p.spid,   s.module,   s.program,   SUM (o.blocks) * t.block_size / 1024 / 1024 mb_used,   o.tablespace,   COUNT(*) sorts FROM v$sort_usage o,   v$session s,   dba_tablespaces t,   v$process p WHERE o.session_addr = s.saddr AND s.paddr          = p.addr AND o.tablespace     = t.tablespace_name GROUP BY s.sid,   s.serial#,   s.username,   s.osuser,   p.spid,   s.module,   s.program,   t.block_size,   o.tablespace ORDER BY sid_serial;

更新於: 2020-12-05

9K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.