Oracle 臨時(shí)表空間暴漲(轉(zhuǎn))

          http://blog.csdn.net/weikaifenglove/article/details/4059258            昨天在做測試的時(shí)候發(fā)現(xiàn)一個(gè)非常奇怪的問題:在程序的查詢模塊中做查詢的時(shí)候,開始速度很快,但是過了一段時(shí)間以后速度就變慢,最后干脆就報(bào)錯(cuò),不工作了。在排錯(cuò)的過程中,發(fā)現(xiàn)Oracle臨時(shí)表空間暴漲,達(dá)到了幾十個(gè)GB,在Oracle中對(duì)Session進(jìn)行跟蹤,發(fā)現(xiàn)磁盤空間還在不停的消耗,幾乎是每隔5s,臨時(shí)表空間就會(huì)增長500MB左右,最后報(bào)錯(cuò)的原因應(yīng)該是因?yàn)闆]有磁盤空間可以分配造成的。這是一件十分恐怖的事情。

                  我們知道Oracle臨時(shí)表空間主要是用來做查詢和存放一些緩存的數(shù)據(jù)的,磁盤消耗的一個(gè)主要原因是需要對(duì)查詢的結(jié)果進(jìn)行排序,如果沒有猜錯(cuò)的話,在磁盤空間的(內(nèi)存)的分配上,Oracle使用的是貪心算法,如果上次磁盤空間消耗達(dá)到1GB,那么臨時(shí)表空間就是1GB,如果還有增長,那么依此類推,臨時(shí)表空間始終保持在一個(gè)最大的上限。像上文提到的恐怖現(xiàn)象經(jīng)過分析可能是以下幾個(gè)方面的原因造成的。
                  1. 沒有為臨時(shí)表空間設(shè)置上限,而是允許無限增長。但是如果設(shè)置了一個(gè)上限,最后可能還是會(huì)面臨因?yàn)榭臻g不夠而出錯(cuò)的問題,臨時(shí)表空間設(shè)置太小會(huì)影響性能,臨時(shí)表空間過大同樣會(huì)影響性能,至于需要設(shè)置為多大需要仔細(xì)的測試。
                  2.查詢的時(shí)候連表查詢中使用的表過多造成的。我們知道在連表查詢的時(shí)候,根據(jù)查詢的字段和表的個(gè)數(shù)會(huì)生成一個(gè)迪斯卡爾積,這個(gè)迪斯卡爾積的大小就是一次查詢需要的臨時(shí)空間的大小,如果查詢的字段過多和數(shù)據(jù)過大,那么就會(huì)消耗非常大的臨時(shí)表空間。
                 3.對(duì)查詢的某些字段沒有建立索引。Oracle中,如果表沒有索引,那么會(huì)將所有的數(shù)據(jù)都復(fù)制到臨時(shí)表空間,而如果有索引的話,一般只是將索引的數(shù)據(jù)復(fù)制到臨時(shí)表空間中。
                 針對(duì)以上的分析,對(duì)查詢的語句和索引進(jìn)行了優(yōu)化,情況得到緩解,但是需要進(jìn)一步測試。

                 總結(jié):
                 1.SQL語句是會(huì)影響到磁盤的消耗的,不當(dāng)?shù)恼Z句會(huì)造成磁盤暴漲。
                 2.對(duì)查詢語句需要仔細(xì)的規(guī)劃,不要想當(dāng)然的去定義一個(gè)查詢語句,特別是在可以提供用戶自定義查詢的軟件中。
                 3.仔細(xì)規(guī)劃表索引。

          臨時(shí)表空間使用注意:
          1.臨時(shí)表空間 是用于在進(jìn)行排序操作(如大型查詢,創(chuàng)建索引和聯(lián)合查詢期間存儲(chǔ)臨時(shí)數(shù)據(jù))
          每個(gè)用戶都有一個(gè)臨時(shí)表空間
          2.對(duì)于大型操作頻繁,(大型查詢,大型分類查詢,大型統(tǒng)計(jì)分析等),應(yīng)指定單獨(dú)的臨時(shí)表空間,以方便管理

          3.分配用戶單獨(dú)臨時(shí)表空間,一般是針對(duì) 大型產(chǎn)品數(shù)據(jù)庫,OLTP數(shù)據(jù)庫,數(shù)據(jù)庫倉庫
          對(duì)于小型產(chǎn)品不需要單獨(dú)制定臨時(shí)表空間,使用默認(rèn)臨時(shí)表空間
          原文鏈接:
          http://blog.csdn.net/weikaifenglove/article/details/4059258

          posted on 2013-09-02 13:51 Alter 閱讀(284) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 梓潼县| 平乡县| 通州市| 贵南县| 邳州市| 丹阳市| 东明县| 竹溪县| 社旗县| 铁力市| 棋牌| 扶风县| 武城县| 根河市| 图木舒克市| 新平| 醴陵市| 阿勒泰市| 宁南县| 涿鹿县| 高青县| 武定县| 台东市| 文成县| 梁平县| 昔阳县| 宁安市| 淄博市| 尤溪县| 河南省| 光山县| 浏阳市| 新建县| 鹿邑县| 邵武市| 邢台县| 拜城县| 洪江市| 淮北市| 鄂托克前旗| 行唐县|