主頁 > 知識庫 > Oracle 數(shù)據(jù)庫 臨時數(shù)據(jù)的處理方法

Oracle 數(shù)據(jù)庫 臨時數(shù)據(jù)的處理方法

熱門標(biāo)簽:溫州人工外呼系統(tǒng) 貴陽智能電銷機(jī)器人官網(wǎng) 外呼系統(tǒng)口號 地圖標(biāo)注付款了怎么找不到了 北京外呼系統(tǒng)公司排名 沈陽400電話是如何辦理 百度地圖標(biāo)注員是干什么 外呼系統(tǒng)鄭州 北京營銷外呼系統(tǒng)廠家
如果用戶查詢時,使用Order BY排序語句指定按員工編號來排序,那么排序后產(chǎn)生的所有記錄就是臨時數(shù)據(jù)。對于這些臨時數(shù)據(jù),Oracle數(shù)據(jù)庫是如何處理的呢?
  通常情況下,Oracle數(shù)據(jù)庫會先將這些臨時數(shù)據(jù)存放到內(nèi)存的PGA(程序全局區(qū))內(nèi)。在這個程序全局區(qū)中有一個叫做排序區(qū)的地方,專門用來存放這些因?yàn)榕判虿僮鞫a(chǎn)生的臨時數(shù)據(jù)。但是這個分區(qū)的容量是有限的。當(dāng)這個分區(qū)的大小不足以容納排序后所產(chǎn)生的記錄時,數(shù)據(jù)庫系統(tǒng)就會將臨時數(shù)據(jù)存放到臨時表空間中。這就是臨時表空間的來歷??雌饋砗孟襁@個臨時表空間是個臨時工,對于數(shù)據(jù)庫的影響不會有多大。其實(shí)大家這是誤解這個臨時表空間了。在用戶進(jìn)行數(shù)據(jù)庫操作時,排序、分組匯總、索引這些作業(yè)是少不了,其會產(chǎn)生大量的臨時數(shù)據(jù)。為此基本上每個數(shù)據(jù)庫都需要用到臨時表空間。而如果這個臨時表空間設(shè)置不當(dāng)?shù)脑?,則會給數(shù)據(jù)庫性能帶來很大的負(fù)面影響。為此管理員在維護(hù)這個臨時表空間的時候,不能夠掉以輕心。要避免因?yàn)榕R時表空間設(shè)置不當(dāng)影響數(shù)據(jù)庫的性能。具體來說,主要需要注意如下幾個方面的內(nèi)容。

  一、創(chuàng)建用戶時要記得為用戶創(chuàng)建臨時表空間。

  最好在創(chuàng)建用戶時為用戶指定臨時表空間。如可以利用語句default temporary table space語句來為數(shù)據(jù)庫設(shè)置默認(rèn)的臨時表空間。不過在Oracle數(shù)據(jù)庫中這個不是強(qiáng)制的。但是筆者強(qiáng)烈建議這么做。因?yàn)槿绻麤]有為用戶指定默認(rèn)臨時表空間的話,那么當(dāng)這個用戶因?yàn)榕判虻炔僮餍枰褂玫脚R時表空間的話,數(shù)據(jù)庫系統(tǒng)就會“自作聰明”的利用系統(tǒng)表空間SYSTEM來創(chuàng)建臨時段。眾所周知,這是一個系統(tǒng)表空間。由于在這個表空間中存放著系統(tǒng)運(yùn)行相關(guān)的數(shù)據(jù),一般的建議是用戶的數(shù)據(jù)不能夠保存在這個表空間中。那么如果將用戶的臨時表空間防止在這個系統(tǒng)表空間之內(nèi),會產(chǎn)生什么負(fù)面影響呢?

  由于臨時表空間中的數(shù)據(jù)是臨時的。為此數(shù)據(jù)庫系統(tǒng)需要頻繁的分配和釋放臨時段。這些頻繁的操作會在系統(tǒng)表空間中產(chǎn)生大量的存儲碎片。當(dāng)這些存儲碎片比較多時,就會影響系統(tǒng)讀取硬盤的效率,從而影響數(shù)據(jù)庫的性能。其次系統(tǒng)表空間的大小往往是有限制的。此時臨時段也來插一腳,就會占用系統(tǒng)表空間的大小。

  為此數(shù)據(jù)庫管理員需要注意一點(diǎn),當(dāng)沒有為用戶指定臨時表空間時,用戶排序等操作仍然需要用到臨時段。此時數(shù)據(jù)庫系統(tǒng)就會將臨時段放入到系統(tǒng)表空間中。為此就會對數(shù)據(jù)庫的性能產(chǎn)生不利的影響。所以筆者建議各位讀者與數(shù)據(jù)庫管理員,在創(chuàng)建用戶的時候同時為用戶指定一個默認(rèn)的表空間,以減少臨時段對系統(tǒng)表空間的占用。

  二、合理設(shè)置PGA,減少臨時表空間使用的幾率。
總之,如果臨時段被頻繁使用的話,由于內(nèi)存與硬盤在性能上的差異,從而會降低數(shù)據(jù)庫的性能。為此在平時工作中,數(shù)據(jù)庫管理員還需要監(jiān)控臨時表空間的使用情況,以判斷是否需要采取措施來減少臨時表空間的使用來提高數(shù)據(jù)庫的查詢性能。為了實(shí)現(xiàn)這個目的,筆者建議數(shù)據(jù)庫管理員可以查看v$sort_segment這張動態(tài)性能視圖。通過這張動態(tài)性能視圖可以查看系統(tǒng)排序段(臨時段的一種)的使用情況。另外通過動態(tài)性能視圖v$sort_usage還可以查詢使用排序段的用戶與會話信息。從而為數(shù)據(jù)庫管理員優(yōu)化數(shù)據(jù)庫性能提供數(shù)據(jù)上的支持。對于這個排序段,筆者還要說明一點(diǎn)。對于排序段來說,同一個例程的所有SQL語句(如果需要排序操作的話)都將共享同一個排序段。并且排序段在第一次需要用到時被創(chuàng)建。排序完成后這個排序段不會被釋放,只有在這個歷程關(guān)閉后排序段才會被釋放。為此以上兩張視圖要綜合起來分析,才能夠得到數(shù)據(jù)庫管理員想要的信息。

  三、要為臨時表空間保留足夠的硬盤空間。

  其他表空間對應(yīng)的數(shù)據(jù)文件,在其創(chuàng)建時就會被完全分配和初始化,即在其創(chuàng)建時就會被分配存儲空間。但是臨時表空間對應(yīng)的臨時文件則不同。如在Linux操作系統(tǒng)中,臨時表空間創(chuàng)建時系統(tǒng)是不會分配和初始化臨時文件的。也就是說,不會為臨時文件分配存儲空間。只有臨時數(shù)據(jù)出現(xiàn)需要用到臨時文件的時候,系統(tǒng)才會在硬盤上分配一塊地方用來保存臨時文件。此時就可能會產(chǎn)生一個問題,即當(dāng)需要用到臨時文件系統(tǒng)為其分配空間的時候,才會先系統(tǒng)分區(qū)中沒有足夠的存儲空間了。此時就會產(chǎn)生一些難以預(yù)料的后果。

  為此對于這些臨時文件,數(shù)據(jù)庫管理員最好能夠預(yù)先為其保留足夠的空間。如在Linux操作系統(tǒng)中,可以將其防止在一個獨(dú)立的分區(qū)內(nèi),不允許其他應(yīng)用程序使用。如此的話,就不用擔(dān)心臨時文件沒有地方存儲了。另外由于臨時表空間主要用來存放一些排序用的臨時文件。為此如果能夠?qū)⑦@個臨時表空間存放在性能比較好的分區(qū)中,還可以提高數(shù)據(jù)庫系統(tǒng)讀取臨時表空間中數(shù)據(jù)的速度。另外由于系統(tǒng)需要頻繁分配臨時表空間中的數(shù)據(jù),為此臨時表空間所在的分區(qū)會出現(xiàn)比較多的碎片。此時如果將臨時表空間存放在一個獨(dú)立的分區(qū)內(nèi),那么數(shù)據(jù)庫管理員就可以單獨(dú)對這個分區(qū)進(jìn)行碎片整理,從而提高這個分區(qū)的性能。所以無論出于什么原因,將臨時表空間防止在一個獨(dú)立的分區(qū)內(nèi),是一個不錯的想法。不僅可以保證臨時文件有存儲的空間,而且還可以提高數(shù)據(jù)庫的性能。

  對于臨時表空間最后需要說明的是,默認(rèn)情況下這個臨時表空間對各個用戶都是共享的。也就是說每個連接到數(shù)據(jù)庫的用戶都可以使用默認(rèn)的臨時表空間。數(shù)據(jù)庫管理員可以為其指定其他的臨時表空間。一般來說,只需要一個臨時表空間即可

  當(dāng)排序操作產(chǎn)生臨時數(shù)據(jù)時,數(shù)據(jù)庫并不是馬上將其存儲在臨時表空間中。通常情況下,會先將這些臨時數(shù)據(jù)存儲在內(nèi)存的PGA程序全局區(qū)內(nèi)。只有當(dāng)這個程序全局區(qū)無法容納全部數(shù)據(jù)時,數(shù)據(jù)庫系統(tǒng)才會啟用臨時表空間中的臨時段來保存這些數(shù)據(jù)。但是眾所周知,操作系統(tǒng)從內(nèi)存中讀取數(shù)據(jù)要比從硬盤中讀取數(shù)據(jù)塊幾千倍。為此比較理想的情況是,這個程序全局區(qū)足夠的大,可以容納所有的臨時數(shù)據(jù)。此時數(shù)據(jù)庫系統(tǒng)就永遠(yuǎn)用不到臨時表空間了。從而可以提高數(shù)據(jù)庫的性能。

  但是這畢竟只是一個理想。由于內(nèi)存大小等多方面的限制,這個PGA程序區(qū)的大小往往是有限制的。所以在進(jìn)行一些大型的排序操作時,這個臨時表空間仍然少不了?,F(xiàn)在數(shù)據(jù)庫管理員可以做的就是合理設(shè)置這個PGA程序全局區(qū)的大小,盡量減少臨時表空間使用的幾率。如在實(shí)際工作中,數(shù)據(jù)庫管理員可以根據(jù)需要來設(shè)置初始化參數(shù)SORT_AREA_SIZE參數(shù)。這個參數(shù)主要控制這個PGA程序全局區(qū)內(nèi)排序區(qū)的大小。通常情況下,如果這個數(shù)據(jù)庫系統(tǒng)主要用來查詢并且需要大量的排序、分組匯總、索引等操作時,那么可以適當(dāng)調(diào)整這個參數(shù),來擴(kuò)大PGA分區(qū)的大小。相反,如果這個系統(tǒng)主要用于更新操作,或者在這個數(shù)據(jù)庫服務(wù)器上還部署由其他的應(yīng)用程序,那么這個PGA分區(qū)就不能夠占用太多的內(nèi)存,以防止對其他應(yīng)用程序產(chǎn)生不利的影響。所以說,數(shù)據(jù)庫官員不能夠一刀切,需要根據(jù)實(shí)際情況來調(diào)整。在必要的情況下,可以增加系統(tǒng)內(nèi)存來增加PGA分區(qū)的大小,從而降低臨時表空間的使用幾率,以提高數(shù)據(jù)庫的排序、分組匯總等操作的性能。
您可能感興趣的文章:
  • Oracle外鍵不加索引引起死鎖示例
  • Oracle 插入超4000字節(jié)的CLOB字段的處理方法
  • oracle 常見等待事件及處理方法
  • Oracle數(shù)據(jù)庫系統(tǒng)緊急故障處理方法
  • Oracle7.X 回滾表空間數(shù)據(jù)文件誤刪除處理方法
  • Oracle7.X 回滾表空間數(shù)據(jù)文件誤刪除處理方法
  • Oracle7.X 回滾表空間數(shù)據(jù)文件誤刪除處理方法
  • Oracle對于死鎖的處理方法

標(biāo)簽:衡水 溫州 通遼 包頭 潮州 定西 淮北 衢州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Oracle 數(shù)據(jù)庫 臨時數(shù)據(jù)的處理方法》,本文關(guān)鍵詞  Oracle,數(shù)據(jù)庫,臨時,數(shù)據(jù),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Oracle 數(shù)據(jù)庫 臨時數(shù)據(jù)的處理方法》相關(guān)的同類信息!
  • 本頁收集關(guān)于Oracle 數(shù)據(jù)庫 臨時數(shù)據(jù)的處理方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章