oracle的臨時表空間問題

2021-06-13 09:20:06 字數 2271 閱讀 2866

如果temp被擴大 關於**temp空間大小 9i就是shutdown在startup也不能 **空間

只能重建才能**空間

temporary 型別的temporary tablespace,是沒有**這個概念,用完了的temp extent,只是標誌為free,不**。temp表空間為autoextend,所以一直擴張.

看我翻譯的文章,當你使用的temporary tablespace 的型別是permanent的時候,smon才會負責**空間。如果你的型別時temporary,smon不會起作用,這跟表空間是否 locally managed (還是字典管理表空間)是不同概念吧。

可以將表空間的預設儲存引數pctincrease改為非0。一般將其設為1,如: 

alter tablespace temp 

default storage(pctincrease 1); 

這樣smon便會將自由範圍自動合併。也可以手工合併自由範圍: 

alter tablespace temp coalesce; (注:這個僅僅對使用字典管理的temp空間有用。)

昨天在做測試的時候發現乙個非常奇怪的問題:在程式的查詢模組中做查詢的時候,開始速度很快,但是過了一段時間以後速度就變慢,最後乾脆就報錯,不工作了。在排錯的過程中,發現oracle臨時表空間暴漲,達到了幾十個gb,在oracle中對session進行跟蹤,發現磁碟空間還在不停的消耗,幾乎是每隔5s,臨時表空間就會增長500mb左右,最後報錯的原因應該是因為沒有磁碟空間可以分配造成的。這是一件十分恐怖的事情。

我們知道oracle臨時表空間主要是用來做查詢和存放一些快取的資料的,磁碟消耗的乙個主要原因是需要對查詢的結果進行排序,如果沒有猜錯的話,在磁碟空間的(記憶體)的分配上,oracle使用的是貪心演算法,如果上次磁碟空間消耗達到1gb,那麼臨時表空間就是1gb,如果還有增長,那麼依此類推,臨時表空間始終保持在乙個最大的上限。像上文提到的恐怖現象經過分析可能是以下幾個方面的原因造成的。

1. 沒有為臨時表空間設定上限,而是允許無限增長。但是如果設定了乙個上限,最後可能還是會面臨因為空間不夠而出錯的問題,臨時表空間設定太小會影響效能,臨時表空間過大同樣會影響效能,至於需要設定為多大需要仔細的測試。

2.查詢的時候連表查詢中使用的表過多造成的。我們知道在連表查詢的時候,根據查詢的字段和表的個數會生成乙個迪斯卡爾積,這個迪斯卡爾積的大小就是一次查詢需要的臨時空間的大小,如果查詢的字段過多和資料過大,那麼就會消耗非常大的臨時表空間。

3.對查詢的某些字段沒有建立索引。oracle中,如果表沒有索引,那麼會將所有的資料都複製到臨時表空間,而如果有索引的話,一般只是將索引的資料複製到臨時表空間中。

針對以上的分析,對查詢的語句和索引進行了優化,情況得到緩解,但是需要進一步測試。

總結:1.sql語句是會影響到磁碟的消耗的,不當的語句會造成磁碟暴漲。

2.對查詢語句需要仔細的規劃,不要想當然的去定義乙個查詢語句,特別是在可以提供使用者自定義查詢的軟體中。

3.仔細規劃表索引。

如果有那位高人遇到過類似的問題,請給予您的建議。

1、臨時表空間的作用:

臨時表空間主要用途是在資料庫進行排序運算、管理索引、訪問檢視等操作時提供臨時的運算空間,當運算完成之後系統會自動清理。

當臨時表空間不足時,表現為運算速度異常的慢,並且臨時表空間迅速增長到最大空間(擴充套件的極限),並且一般不會自動清理了。

2、迅速增長的原因:

一般原因是sql演算法不正確,可能導致出現了迪卡爾積。

另外乙個原因是檢視的建立問題(本人遇到的正是該問題!)。oracle資料庫中多張表聯合查詢時,極限的表單數量為4張,一般將以為3張!有時需要大於4張表聯合查詢時,怎麼辦呢?可以建立子檢視:

如view0(聯合table0,table1,table2),view1(聯合table0,table3,table4),view2(聯合table0,table5,table6)

然後將view0、view1、view2聯合成view。

這樣可以解決臨時表空間迅速增長的問題!

臨時表空間使用注意:

1.臨時表空間 是用於在進行排序操作(如大型查詢,建立索引和聯合查詢期間儲存臨時資料)

每個使用者都有乙個臨時表空間

2.對於大型操作頻繁,(大型查詢,大型分類查詢,大型統計分析等),應指定單獨的臨時表空間,以方便管理

3.分配使用者單獨臨時表空間,一般是針對 大型產品資料庫,oltp資料庫,資料庫倉庫

對於小型產品不需要單獨制定臨時表空間,使用預設臨時表空間

注:如果臨時表空間異常增漲很快,則要考慮是否應用的sql語句產生了笛卡兒積,可以通過stactpack 進行分析查出問題所在,從而保證資料庫的正常執行

Oracle臨時表空間

oracle臨時表空間主要是用來做查詢和存放一些快取的資料的,磁碟消耗的乙個主要原因是需要對查詢的結果進行排序,如果沒有猜錯的話,在磁碟空間的 記憶體 的分配上,oracle使用的是貪心演算法,如果上次磁碟空間消耗達到1gb,那麼臨時表空間就是1gb,如果還有增長,那麼依此類推,臨時表空間始終保持在...

Oracle 臨時表空間

我多表查詢大概五十萬條資料的檢視引發了乙個錯誤,報空間記憶體不足,開始思考分析還有哪些情況下是會使用到temp臨時表空間,在海量資料的情況下表空間不足是常見的問題 ora 01114 將塊寫入檔案 201 時出現 io 錯誤 塊 3136640 ora 27072 檔案 i o 錯誤 additio...

oracle臨時表空間

oracle臨時表空間主要是用來做查詢和存放一些快取的資料的,磁碟消耗的乙個主要原因是需要對查詢的結果進行排序,如果沒有猜錯的話,在磁碟空間的 記憶體 的分配上,oracle使用的是貪心演算法,如果上次磁碟空間消耗達到1gb,那麼臨時表空間就是1gb,如果還有增長,那麼依此類推,臨時表空間始終保持在...