2013-03-26 42 views
0

我想比較兩個在我的系統(Oracle 10g)中非常大的表。 我用來比較的方式是「MINUS」操作。 由於表的大小很大,我想實時瞭解臨時表空間 的用法。如何知道Oracle中臨時表空間的用法

我搜索了一些關於如何獲得臨時表空間的用法。但我不確定哪一個是正確的。這裏有三種方法:

1.從V $ TEMP_SPACE_HEADER選擇TABLESPACE_NAME,BYTES_USED,BYTES_FREE;

2.select BYTES_USED,從V $ TEMP_EXTEND_POOL

What is the difference of BYTES_USED and BYTES_CACHED 

3.select USED_EXTENDS,BYTES_CACHED USED_BLOCKS V $ sort_segment

三種方式真的很困惑我很多,我不知道是什麼區別。

+0

MINUS可能不是一個非常有效的方法 - 如果你正在尋找一個表中不存在的另一個表中的行,那麼通向一個散列連接的equijoin可能會更有效。 – 2013-03-26 09:59:38

+0

嗨,@ David Aldridge。感謝您的評論。實際上,一個表是另一個表的備份。原始表中的數據可以插入,更新或刪除。我不知道其他任何有效的方法來執行此操作比較。 – tousinn 2013-03-27 00:20:06

回答

2

查看v $ sql_workarea和v $ sql_workarea_active的動態性能視圖 - 它們不僅會告訴您查詢使用了多少空間,還有多少是由於執行計劃中的不同階段造成的,它是什麼樣的排序區域(散列連接等)以及它如何被使用(單通等)。這將是更有效的性能調整方法。

+0

嗨,@David.Thank你的答案。我爲schema創建了一個臨時表空間。我想知道臨時表空間是否被使用以及它的用法。 – tousinn 2013-03-27 00:23:11

+0

V $ SQL_WORKAREA_ACTIVE將在正在使用的空間中標識表空間,但v $ sort_segment也應該如此。你看到什麼問題? V $ SORT_SEGMENT中沒有記錄? – 2013-03-27 10:04:36

+0

嗨,@David,我發現了三種方法來查詢我的問題中臨時表空間的用法,但我不知道它們之間的區別。 – tousinn 2013-03-28 00:08:57