Oracle暫存資料表空間為何暴漲?

來源:互聯網
上載者:User

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

        我們知道Oracle暫存資料表空間主要是用來做查詢和存放一些緩衝的資料的,磁碟消耗的一個主要原因是需要對查詢的結果進行排序,如果沒有猜錯的話,在磁碟空間的(記憶體)的分配上,Oracle使用的是貪心演算法,如果上次磁碟空間消耗達到1GB,那麼暫存資料表空間就是1GB,如果還有增長,那麼依此類推,暫存資料表空間始終保持在一個最大的上限。像上文提到的恐怖現象經過分析可能是以下幾個方面的原因造成的。
        1. 沒有為暫存資料表空間設定上限,而是允許無限增長。但是如果設定了一個上限,最後可能還是會面臨因為空白間不夠而出錯的問題,暫存資料表空間設定太小會影響效能,暫存資料表空間過大同樣會影響效能,至於需要設定為多大需要仔細的測試。
        2.查詢的時候連表查詢中使用的表過多造成的。我們知道在連表查詢的時候,根據查詢的欄位和表的個數會產生一個迪斯卡爾積,這個迪斯卡爾積的大小就是一次查詢需要的臨時空間的大小,如果查詢的欄位過多和資料過大,那麼就會消耗非常大的暫存資料表空間。
       3.對查詢的某些欄位沒有建立索引。Oracle中,如果表沒有索引,那麼會將所有的資料都複製到暫存資料表空間,而如果有索引的話,一般只是將索引的資料複製到暫存資料表空間中。
       針對以上的分析,對查詢的語句和索引進行了最佳化,情況得到緩解,但是需要進一步測試。

       總結:
       1.SQL語句是會影響到磁碟的消耗的,不當的語句會造成磁碟暴漲。
       2.對查詢語句需要仔細的規劃,不要想當然的去定義一個查詢語句,特別是在可以提供使用者自訂查詢的軟體中。
       3.仔細規劃表索引。
       如果有那位高人遇到過類似的問題,請給予您的建議。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.