如何在 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;
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP