Oracle數(shù)據(jù)庫(kù)是目前主流的商用數(shù)據(jù)庫(kù)之一,隨著硬件價(jià)格的下降,以及Oracle數(shù)據(jù)庫(kù)強(qiáng)大的數(shù)據(jù)管理能力和良好的平臺(tái)支持性,被越來(lái)越多的用戶使用。因此,如何使用Oracle數(shù)據(jù)庫(kù)實(shí)現(xiàn)一個(gè)高效的數(shù)據(jù)管理平臺(tái),被廣泛關(guān)注。下面從Oracle數(shù)據(jù)庫(kù)實(shí)例的存儲(chǔ)管理、內(nèi)存參數(shù)設(shè)置和日常維護(hù)等方面,分析影響數(shù)據(jù)庫(kù)性能的原因,從而通過合理的配置,實(shí)現(xiàn)一個(gè)高效的數(shù)據(jù)管理平臺(tái)。
1、存儲(chǔ)管理
系統(tǒng)的I/O性能是Oracle數(shù)據(jù)庫(kù)系統(tǒng)的性能瓶頸之一,選擇高速可靠的存儲(chǔ)設(shè)備,是解決數(shù)據(jù)庫(kù)性能問題的重要手段,在已有存儲(chǔ)設(shè)備的基礎(chǔ)上,如何合理的配置,也是提高Oracle數(shù)據(jù)庫(kù)性能的有效手段。
1.1 使用磁盤陣列
在數(shù)據(jù)庫(kù)服務(wù)器上,使用冗余獨(dú)立/廉價(jià)磁盤陣列(Redundant Array of Independent/Inexpensive Disks,RAID)配置磁盤幾乎已經(jīng)成為一種規(guī)范,使用磁盤陣列可以改進(jìn)性能和可用性。但是,選擇單塊磁盤時(shí),應(yīng)該根據(jù)數(shù)據(jù)庫(kù)需要存儲(chǔ)的數(shù)據(jù)量的大小來(lái)選擇磁盤容量,過大的容量會(huì)帶來(lái)不適當(dāng)?shù)娜哂嗪洼^差的性能。同時(shí),要根據(jù)數(shù)據(jù)庫(kù)的特點(diǎn),選擇合適的RAID級(jí)別。RAID 5對(duì)于有大量讀操作的應(yīng)用程序可以獲得最大的性能,這是一種低成本的解決方案,但是對(duì)于大量寫操作的Oracle應(yīng)用程序,效率并不高。RAID 10是先鏡像,然后再對(duì)其進(jìn)行分段,這是最常見的Oracle OLTP產(chǎn)品的RAID級(jí)別。它通過將RAID 0的磁盤I/O分段優(yōu)勢(shì)融入到RAID 1帶來(lái)的鏡像,結(jié)合了這個(gè)兩個(gè)RAID級(jí)別的優(yōu)點(diǎn)。在高讀/寫量的環(huán)境(如OLAP)中,由于對(duì)數(shù)據(jù)的小規(guī)模訪問會(huì)很頻繁,建議使用RAID 10。在硬件條件允許的情況下,還可以使用RAID 10或者RAID 5的改進(jìn)方案。對(duì)于使用了磁盤陣列,不再需要把磁盤陣列上的一個(gè)邏輯設(shè)備分割成操作系統(tǒng)的多個(gè)盤區(qū),因?yàn)檫@樣做會(huì)增加必須管理的數(shù)據(jù)文件位置的數(shù)量,從而使得系統(tǒng)I/O性能下降。
1.2 關(guān)鍵數(shù)據(jù)文件分開存儲(chǔ)
為了更有效地在文件系統(tǒng)上操作Oracle數(shù)據(jù)庫(kù),應(yīng)該把關(guān)鍵的數(shù)據(jù)文件分布到可用的文件系統(tǒng)中。以下元素關(guān)聯(lián)的文件應(yīng)該盡可能分離:SYSTEM表空間、TEMPORARY表空間、UNDO表空間、聯(lián)機(jī)重做日志文件(最好放在最快的磁盤上)、操作系統(tǒng)盤、放在ORACLE_HOME目錄下的關(guān)鍵ORACLE文件、經(jīng)常被訪問的表的數(shù)據(jù)文件、經(jīng)常被訪問的索引的數(shù)據(jù)文件、歸檔區(qū)域等。同時(shí),分開存儲(chǔ)數(shù)據(jù)和索引文件。把關(guān)鍵的Oracle數(shù)據(jù)文件分開放置,這樣可以避免磁盤爭(zhēng)用成為一個(gè)“瓶頸”。通過把經(jīng)常連接的幾個(gè)表的表和索引分開放置,保證即使最糟糕的表連接也不會(huì)導(dǎo)致磁盤爭(zhēng)用。
1.3 使用本地管理的表空間
在Oracle 8i之前,所有表空間的段的盤區(qū)信息都通過Oracle數(shù)據(jù)字典進(jìn)行維護(hù),這樣,發(fā)生在數(shù)據(jù)庫(kù)的段上并關(guān)系到盤區(qū)分配的操作,例如擴(kuò)展或截取一個(gè)表,將會(huì)導(dǎo)致對(duì)數(shù)據(jù)字典的操作。如果有很多擁有大量盤區(qū)的表被操作時(shí),維護(hù)數(shù)據(jù)字典將會(huì)成為這些操作的瓶頸。Oracle 8i推出了新的盤區(qū)管理方式,叫本地管理的盤區(qū),通過本地管理的盤區(qū),盤區(qū)管理操作被重新分配到數(shù)據(jù)文件頭中的位圖塊中,數(shù)據(jù)庫(kù)的每個(gè)表空間都只包含自己的盤區(qū)信息,可以使用快速散列進(jìn)程訪問該信息,而不是使用較慢的基于表的查詢?cè)L問,因而使用本地管理的表空間,可以提高性能。可以創(chuàng)建本地管理的表空間,也可以把數(shù)據(jù)字典管理的表空間遷移到本地管理的表空間。
1.4 使用分區(qū)來(lái)避免磁盤爭(zhēng)用
分區(qū)技術(shù)是基于海量數(shù)據(jù)的數(shù)據(jù)庫(kù)系統(tǒng)(比如數(shù)據(jù)倉(cāng)庫(kù)或者OLAP系統(tǒng))中最重要的一個(gè)技術(shù),很難想象,在一個(gè)存儲(chǔ)著上TB或者幾十TB的數(shù)據(jù)庫(kù)中,數(shù)據(jù)表不使用分區(qū)的情況。分區(qū)可能是提高與大型表有關(guān)的性能的最佳方法。通過訪問一個(gè)表或索引的較小片段,而不是訪問整個(gè)表或索引,分區(qū)可以很好地提高效率。這個(gè)策略在一個(gè)或多個(gè)用戶訪問同一個(gè)表的多個(gè)部分時(shí)特別有效。如果一個(gè)表的分區(qū)(片段)位于不同的設(shè)備上,吞吐量就會(huì)大大增加,分區(qū)還可以被獨(dú)立地備份和恢復(fù),這樣可以減少備份期間可能出現(xiàn)的磁盤I/O問題。僅當(dāng)分區(qū)被正確實(shí)現(xiàn)后,才能體現(xiàn)Oracle性能提高的良好優(yōu)點(diǎn)。設(shè)計(jì)良好的分區(qū),在數(shù)據(jù)操作中,可以很好的實(shí)現(xiàn)分區(qū)規(guī)避,同時(shí)對(duì)索引進(jìn)行分區(qū),并使用并行選項(xiàng),可以使分區(qū)功能更強(qiáng)大。為了最小化對(duì)一個(gè)大表的磁盤I/O,應(yīng)該把表分割在多個(gè)分區(qū)上,這些分區(qū)應(yīng)該放置在不同的物理磁盤上。
1.5 使用自動(dòng)存儲(chǔ)管理(Automatic Storage Management,ASM)
在Oracle Database 10g Release 2中,使用自動(dòng)存儲(chǔ)管理極大地簡(jiǎn)化了數(shù)據(jù)庫(kù)的存儲(chǔ)管理和配置。ASM提供了內(nèi)置于Oracle數(shù)據(jù)庫(kù)內(nèi)核中的文件系統(tǒng)和卷管理器功能,提供了跨越所有服務(wù)器和存儲(chǔ)平臺(tái)的簡(jiǎn)單存儲(chǔ)管理界面。提供了管理動(dòng)態(tài)數(shù)據(jù)庫(kù)環(huán)境的靈活性,并且可以有效地提高效率。
ASM主要有以下優(yōu)點(diǎn):
1)將I/O均勻地分布到所有可用磁盤驅(qū)動(dòng)器以防止產(chǎn)生熱點(diǎn),并且最大化性能;
2)不再需要過多地進(jìn)行配置工作,并且最大化推動(dòng)數(shù)據(jù)庫(kù)合并的利用存儲(chǔ)資源;
3)內(nèi)在地支持大文件;
4)在增量增加或刪除存儲(chǔ)容量后執(zhí)行自動(dòng)聯(lián)機(jī)重分配;
5)維護(hù)數(shù)據(jù)的冗余副本以提高可用性,或者利用第三方的RAID功能。
Oracle數(shù)據(jù)庫(kù)可以包含ASM文件和非ASM文件,任何新的文件都可以創(chuàng)建為ASM文件,已有的文件也可以遷移到ASM。ASM降低了Oracle數(shù)據(jù)庫(kù)的成本和復(fù)雜性,并且不會(huì)影響到性能或可用性。構(gòu)建ASM的主要用途是解決數(shù)據(jù)庫(kù)的配置和布局以及IT角色之間的通信。有資料表明,在同樣的硬件條件下,使用ASM比使用操作系統(tǒng)的文件系統(tǒng)的I/O要快26%左右。
總之,通過以上這些配置要么是提高磁盤I/O性能,要么就是減少I/O爭(zhēng)用,以此來(lái)提高數(shù)據(jù)庫(kù)性能。
2、內(nèi)存優(yōu)化
Oracle實(shí)例的內(nèi)存使用對(duì)性能起著至關(guān)重要的作用。如果未按最佳方式為各種結(jié)構(gòu)分配內(nèi)存量,性能將急轉(zhuǎn)直下。分配的內(nèi)存量不能過少,也不能過多。在較早的數(shù)據(jù)庫(kù)版本中,DBA只有掌握大量的知識(shí),花費(fèi)大量的時(shí)間才能調(diào)整內(nèi)存的使用,但是在11g版本中,內(nèi)存調(diào)整大多可以自動(dòng)完成。
Oracle實(shí)例中的內(nèi)存使用分為兩類:程序全局區(qū)域(Program Global Area,PGA)和系統(tǒng)全局區(qū)域(System Global Area,SGA),前者專門供每個(gè)會(huì)話使用,后者由所有Oracle進(jìn)程共享。從9i版本開始,PGA的管理實(shí)現(xiàn)了自動(dòng)化,從10g版本開始,SGA的管理實(shí)現(xiàn)了自動(dòng)化,11g版本可同時(shí)自動(dòng)管理PGA和SGA。
2.1 PGA 內(nèi)存管理
針對(duì)Oracle實(shí)例的用戶會(huì)話由連接到服務(wù)器進(jìn)程的用戶進(jìn)程組成。用戶進(jìn)程生成SQL語(yǔ)句,并將它們發(fā)送到服務(wù)器進(jìn)程供執(zhí)行,這就是客戶端與服務(wù)器的分工。與服務(wù)器進(jìn)程關(guān)聯(lián)在一起的是非共享內(nèi)存塊:PAG。在執(zhí)行SQL語(yǔ)句時(shí),服務(wù)器進(jìn)程使用PGA來(lái)存儲(chǔ)會(huì)話特有的數(shù)據(jù),包括:臨時(shí)表、排序表、歸并位圖、變量、調(diào)用堆棧。PGA中的某些數(shù)據(jù)必須使用內(nèi)存。例如,如果會(huì)話的調(diào)用堆棧需要內(nèi)存,那么,相應(yīng)的內(nèi)存必須可供使用。而對(duì)于其他存儲(chǔ)結(jié)構(gòu),例如臨時(shí)表存儲(chǔ),使用PGA的效果是不錯(cuò)的,但PGA并不是必需的,因?yàn)榭梢詫?shù)據(jù)寫到基于磁盤的存儲(chǔ)結(jié)構(gòu)中,但是這會(huì)對(duì)性能產(chǎn)生負(fù)面影響。Oracle強(qiáng)烈建議使用自動(dòng)管理PGA內(nèi)存。實(shí)現(xiàn)自動(dòng)PGA內(nèi)存管理,需要設(shè)置PGA內(nèi)存分配總量(所有會(huì)話需要量之和)的目標(biāo),此后,Oracle實(shí)例將根據(jù)需要,從總量中為會(huì)話分配內(nèi)存,在某個(gè)會(huì)話執(zhí)行完語(yǔ)句后,此會(huì)話使用的PGA可以分配給另一會(huì)話。在任何時(shí)刻,只有某些已經(jīng)連接上的會(huì)話需要任何可轉(zhuǎn)讓的PGA內(nèi)存,即使會(huì)話處于閑置狀態(tài),也都需要一定量的PGA內(nèi)存來(lái)保留當(dāng)前會(huì)話的狀態(tài),但總體看來(lái),這會(huì)留下足夠的空間使正在實(shí)際運(yùn)行語(yǔ)句的會(huì)話獲得需要的內(nèi)存。
使用兩個(gè)實(shí)例參數(shù)來(lái)啟用PGA 內(nèi)存的自動(dòng)管理:WORKAREA_SIZE_POLICY,PGA_AGGREGAT_TARGET,WORKAREA_SIZE_POLICY的默認(rèn)值是AUTO,就是自動(dòng)將PGA分配給用戶,同時(shí)力求將PGA分配的總量保持在PGA_AGGREGAT_TARGET范圍以內(nèi)。
2.2 SGA 內(nèi)存管理
SGA包含多個(gè)內(nèi)存結(jié)構(gòu),這些結(jié)構(gòu)的大小可以以獨(dú)立方式調(diào)整,主要有:共享池、數(shù)據(jù)庫(kù)高速緩存區(qū)、大池 、流池、Java池、日志緩沖區(qū)。分配給大池、Java池和流池的內(nèi)存與轉(zhuǎn)讓無(wú)關(guān),原因是需要這樣的內(nèi)存,或者相應(yīng)的內(nèi)容不可轉(zhuǎn)讓。如果這些結(jié)構(gòu)不夠大,將發(fā)生錯(cuò)誤;如果這些結(jié)構(gòu)過大,也不會(huì)提高性能。分配給共享池、數(shù)據(jù)庫(kù)高速緩存區(qū)和日志緩存區(qū)的內(nèi)存是可以轉(zhuǎn)讓的;如果達(dá)不到最優(yōu)大小,不會(huì)發(fā)生錯(cuò)誤,但性能會(huì)因此下降。共享池是一個(gè)例外:如果在較長(zhǎng)時(shí)間內(nèi)達(dá)不到最優(yōu)大小,將會(huì)發(fā)生錯(cuò)誤。
Oracle公司同樣建議對(duì)SGA內(nèi)存進(jìn)行自動(dòng)管理。設(shè)置SGA的總大小,實(shí)例依據(jù)總量將內(nèi)存分配給各個(gè)結(jié)構(gòu),確保不存在因SGA組件不夠大帶來(lái)錯(cuò)誤,且分配大于最小限度的內(nèi)存使SGA組件可以最佳狀態(tài)執(zhí)行。根據(jù)需要調(diào)整組件的大小,這樣,如果組件需要更多內(nèi)存,可以從具有多余空間的組件那里獲取內(nèi)存。要啟用SGA自動(dòng)管理,則保留上述內(nèi)存結(jié)構(gòu)參數(shù)的默認(rèn)值,并設(shè)置一個(gè)參數(shù),來(lái)啟用自動(dòng)共享內(nèi)存管理:SGA_TARGET,在使用自動(dòng)共享內(nèi)存管理時(shí),實(shí)例將監(jiān)視各個(gè)SGA組件的內(nèi)存需求,并根據(jù)需要將內(nèi)存分配給組件,如有必要,會(huì)減少內(nèi)存容量,以便將內(nèi)存分配總量控制在目標(biāo)范圍內(nèi)。包含在目標(biāo)范圍的還有日志緩沖區(qū),其大小使用LOG_BUFFER參數(shù)進(jìn)行設(shè)置。LOG_BUFFER的默認(rèn)大小可能是正確的,可將此參數(shù)設(shè)置得比默認(rèn)值更大,但這往往會(huì)導(dǎo)致性能下降,如果將其設(shè)置得低于默認(rèn)值,將忽略相應(yīng)設(shè)置。
2.3 Automatic Memory Management
使用Automatic Memory Management機(jī)制時(shí),通過設(shè)置MEMORY_TARGET這個(gè)參數(shù),就可以讓Oracle實(shí)例在總體上管理服務(wù)器內(nèi)存的使用。這允許Oracle根據(jù)需要,在PGA和SGA之間轉(zhuǎn)換內(nèi)存,從而將自動(dòng)PGA管理和自動(dòng)SGA管理又向前推進(jìn)了一步。自動(dòng)內(nèi)存管理會(huì)帶來(lái)巨大的性能優(yōu)勢(shì)。在實(shí)例運(yùn)行過程中,無(wú)法根據(jù)活動(dòng)模式的更改,在SGA和PGA之間手工轉(zhuǎn)換內(nèi)存,而且很多系統(tǒng)也無(wú)法同時(shí)為二者分配足夠的內(nèi)存,來(lái)滿足它們的峰值需求;自動(dòng)內(nèi)存管理能夠根據(jù)需要,在SGA和PGA之間轉(zhuǎn)換內(nèi)存,以便在內(nèi)存總量允許的范圍內(nèi)優(yōu)化性能。必須由DBA和系統(tǒng)管理員共同確定總量大小,如果DBA設(shè)置的上限過大,以至于操作系統(tǒng)必須將SGA和PGA分頁(yè)寫入交換設(shè)備,這將會(huì)失去意義;系統(tǒng)管理員將建議適當(dāng)?shù)淖畲笾怠?/p>
MEMORY_MAX_TARGET參數(shù)限制了MEMORY_TARGET參數(shù)的最大值不能超過。因此啟用自動(dòng)內(nèi)存管理,只要設(shè)置一個(gè)參數(shù)MEMORY_TARGET,而不必設(shè)置上面列出的其他參數(shù)。
2.4 使用內(nèi)存顧問程序
Oracle實(shí)例收集大量有關(guān)活動(dòng)和性能的信息。這些統(tǒng)計(jì)信息收集到內(nèi)存中,并由MMON(Manageability Monitor)后臺(tái)進(jìn)程定期轉(zhuǎn)儲(chǔ)到自動(dòng)工作負(fù)荷倉(cāng)庫(kù)(Automatic Workload Repository,AWR),這些統(tǒng)計(jì)信息供內(nèi)存顧問程序使用。內(nèi)存顧問程序是計(jì)算更改SGA和PGA內(nèi)存結(jié)構(gòu)大小的效果的工具。AWR工具使用顧問程序制定有關(guān)內(nèi)存分配的決策,DBA可以通過各種視圖或者EntERPrise Management Database Control看到他們。通過查詢V$pga_target_advice、V$sga_target_advice和V$memory_target_advice,可以分別得到最佳的PGA、SGA和內(nèi)存分配值。如果使用自動(dòng)內(nèi)存管理,僅需要查詢最后一個(gè)視圖,來(lái)確定Oracle實(shí)例總內(nèi)存的最佳分配值。同樣,可以通過EntERPrise Management Database Control,使用顧問程序來(lái)收集有關(guān)內(nèi)存分配的建議,通過打開Memory Advisors鏈接,可以分別查找SGA、PGA和Memory的當(dāng)前設(shè)置大小和建議的最佳大小。
3、日常運(yùn)行和維護(hù)
在數(shù)據(jù)庫(kù)的長(zhǎng)期運(yùn)行過程中,隨著數(shù)據(jù)量的增加,以及數(shù)據(jù)物理存儲(chǔ)的變化,數(shù)據(jù)庫(kù)的性能會(huì)有所下降,所以,對(duì)數(shù)據(jù)庫(kù)進(jìn)行相關(guān)的日常維護(hù),也是提高數(shù)據(jù)庫(kù)性能的重要手段。
3.1 歸檔舊的數(shù)據(jù)
遵循“二八”原則,數(shù)據(jù)庫(kù)中有很多數(shù)據(jù)很少被訪問到,所以應(yīng)該對(duì)于這些“歷史”數(shù)據(jù),進(jìn)行相應(yīng)的歸檔操作。如果是已經(jīng)使用了分區(qū)的表,可以通過分區(qū)合并和拆分,進(jìn)行數(shù)據(jù)歸檔。以此來(lái)降低查詢數(shù)據(jù)時(shí)的磁盤I/O量,減少DML操作時(shí)的鎖沖突,提高數(shù)據(jù)庫(kù)性能。
3.2 管理無(wú)效對(duì)象和無(wú)用對(duì)象
決定性能的另一關(guān)鍵因素是數(shù)據(jù)庫(kù)中各種對(duì)象的狀態(tài),如果PL/SQL對(duì)象是無(wú)效的(INVALID),則會(huì)對(duì)性能產(chǎn)生負(fù)面影響,也可能導(dǎo)致錯(cuò)誤;如果無(wú)法使用索引,那么SQL語(yǔ)句的執(zhí)行速度可能大大降低,并更密集地使用資源。應(yīng)該識(shí)別、了解和修復(fù)所有無(wú)效對(duì)象和不可用的對(duì)象。
1)無(wú)效對(duì)象
存儲(chǔ)的PL/SQL是數(shù)據(jù)字典中編譯為PL/SQL對(duì)象并在其中保持的代碼,可以是過程、函數(shù)、觸發(fā)器、程序包或?qū)ο箢愋汀_@些對(duì)象大多數(shù)會(huì)引用數(shù)據(jù)對(duì)象(例如表)。在編譯對(duì)象時(shí),編譯器將檢查器引用的數(shù)據(jù)對(duì)象,以便確認(rèn)代碼的定義正確。如果編譯時(shí)發(fā)現(xiàn)引用的數(shù)據(jù)對(duì)象不存在,會(huì)將該對(duì)象標(biāo)記為無(wú)效;但是對(duì)象可能在創(chuàng)建一段時(shí)間之后變得無(wú)效。DBA_OBJECTS視圖包含STATUS列,該列標(biāo)記對(duì)象的狀態(tài)是有效還是無(wú)效。如果有相關(guān)的無(wú)效對(duì)象,應(yīng)該進(jìn)行刪除或者修復(fù)。
2)無(wú)用的索引
一個(gè)索引由若干按照順序排列的索引鍵值組成,其中每個(gè)索引鍵值都具有相關(guān)聯(lián)的rowid,rowid是索引鍵引用的行的物理位置的指針。如果某個(gè)表的rowid發(fā)生變化,那么索引就會(huì)被標(biāo)記為無(wú)用。索引變得無(wú)用的原因有許多種,其中最常見的是使用Alter table……move命令移動(dòng)了指定的表,會(huì)改變所有行的物理位置,因此索引被指向錯(cuò)誤的位置,對(duì)于分區(qū)表的分區(qū)調(diào)整,也同樣會(huì)產(chǎn)生無(wú)用索引。隨著時(shí)間的推移,執(zhí)行了許多影響行鍵值的刪除和更新操作,索引往往會(huì)變得無(wú)用。Oracle會(huì)發(fā)現(xiàn)這個(gè)錯(cuò)誤,從而不允許使用該索引。
在Oracle 11g版本中,如果某條SQL語(yǔ)句試圖使用無(wú)用的索引,那么查詢會(huì)重新使用不需要該索引的執(zhí)行計(jì)劃,SQL語(yǔ)句的執(zhí)行總會(huì)成功,不過查詢的性能會(huì)顯著降低。這種方式由實(shí)例參數(shù)SKIP_UNUSABLE_INDEXES控制,它的默認(rèn)值是TRUE。如果希望在查詢中使用到無(wú)用索引時(shí)返回錯(cuò)誤消息,那么可以執(zhí)行Alter System Set SKIP_UNUSABLE_INDEXES=FALSE。通過查詢DBA_INDEXES視圖,運(yùn)行Select owner, index_name from dba_indexes where status=’UNUSABLE’,可以查找變得無(wú)用的索引,并使用Alter Index …… Rebuild命令重新創(chuàng)建該索引。重建索引是數(shù)據(jù)庫(kù)正常維護(hù)工作的一部分。
3.3 消除數(shù)據(jù)碎片
碎片會(huì)阻礙數(shù)據(jù)庫(kù)的空間管理,但總的說(shuō)來(lái),一個(gè)段中的盤區(qū)量的多少總是會(huì)影響數(shù)據(jù)庫(kù)性能。擁有很多跨多個(gè)數(shù)據(jù)文件的不連續(xù)盤區(qū)的位圖索引就是一個(gè)大的性能問題。可以使用正確的盤區(qū)大小以消除碎片,對(duì)于已經(jīng)有碎片的數(shù)據(jù)表,可以創(chuàng)建一個(gè)新表空間并把數(shù)據(jù)移到其中。
3.4 增加日志文件的大小
增加日志文件的大小和LOG_CHECKPOINT_INTERVAL以提高速度,如果想讓大量的INSERT、UPDATE和DELETE操作速度更快,可以增加日志文件大小,并確保這些文件在最快的磁盤上。Oracle依賴于聯(lián)機(jī)重做日志文件來(lái)記錄事務(wù)處理。每次數(shù)據(jù)庫(kù)中發(fā)生一次事務(wù)處理,聯(lián)機(jī)重做日志文件中就會(huì)增加一個(gè)條目。如果增大分配給日志的空間,就可以提高性能,沒有提交的事務(wù)同樣會(huì)生成日志條目,因?yàn)樗鼈兩沙蜂N記錄,這些撤銷記錄也寫入到重做日志。增加日志文件的大小,從而增加處理大型IN?SERTS、DELETES和UPDATES(DMLs)操作的規(guī)模。
3.5 配置UNDO 表空間
回滾段保存了在一次更新和刪除期間內(nèi)的數(shù)據(jù)快照,如果初始化參數(shù)UNDO_MANAGEMENT=MANUAL,那么就可以像Oracle前面的版本一樣使用回滾段。如果初始化參數(shù)UNDO_MANAGEMENT=AUTO,就使用撤銷表空間管理。當(dāng)事務(wù)回滾時(shí),就要用到數(shù)據(jù)快照,如果把數(shù)據(jù)庫(kù)設(shè)置為使用回滾段,要為各個(gè)回滾段保留多個(gè)表空間,這樣用戶就不會(huì)在同一個(gè)表空間中出現(xiàn)爭(zhēng)用現(xiàn)象。在Oracle 9i中,提出了一個(gè)管理Rollback或UNDO數(shù)據(jù)的新辦法,就是使用UNDO表空間,大大簡(jiǎn)化了對(duì)事務(wù)的管理。在回滾段中,撤銷塊會(huì)根據(jù)需要被新的事務(wù)重寫,因而要保證有足夠大的回滾段可用于事務(wù)。從而避免執(zhí)行大的事務(wù)時(shí)發(fā)生快照太舊的錯(cuò)誤,并且保證有足夠的回滾段來(lái)維護(hù)數(shù)據(jù)庫(kù)中的常規(guī)活動(dòng),從而最小化回滾段的爭(zhēng)用。為了利用自動(dòng)撤銷管理,可以在數(shù)據(jù)庫(kù)中創(chuàng)建UNDO類型的表空間。并在初始化文件中指定3個(gè)新的參數(shù):UNDO_MANAGEMENT=AUTO, UNDO_TABLESPACE=UN?DOTBS1, UNDO_RETENTION= 時(shí)間值,UNDO_RETENTION初始化參數(shù)用來(lái)指定撤銷數(shù)據(jù)被提交之后保留在表空間中的數(shù)據(jù)值(秒),這是使用撤銷表空間的真正優(yōu)點(diǎn),因?yàn)椴煌趥鹘y(tǒng)的回滾段,數(shù)據(jù)庫(kù)至少會(huì)嘗試為長(zhǎng)期運(yùn)行的查詢維護(hù)較早版本的數(shù)據(jù)。如果將UNDO_MANAGEMENT設(shè)置為AUTO,即使用自動(dòng)撤銷管理,就要將UNDO_TABLESPACE配置一個(gè)具體的表空間,如果沒有配置,則使用SYSTEM表空間,這將會(huì)影響數(shù)據(jù)庫(kù)性能。
通過V$UNDOSTAT視圖可以監(jiān)控實(shí)例中當(dāng)前事務(wù)使用UNDO表空間的情況,視圖中的每行表示在過去24小時(shí)里每隔10分鐘UNDO表空間的使用情況、事務(wù)量和查詢長(zhǎng)度等信息的統(tǒng)計(jì)快照,通過分析這些信息可以對(duì)UNDO表空間進(jìn)行重新配置。
4、結(jié)束語(yǔ)
有關(guān)Oracle數(shù)據(jù)庫(kù)性能優(yōu)化的方法還有很多,例如配置RAC、實(shí)現(xiàn)Data Guard以及SQL查詢優(yōu)化等,相關(guān)的論文有很多,這里不再討論。
總之,在硬件設(shè)備既定的情況下,通過上述的相關(guān)配置,能夠進(jìn)一步的提高和優(yōu)化Oracle數(shù)據(jù)庫(kù)的性能,實(shí)現(xiàn)一個(gè)功能強(qiáng)大的數(shù)據(jù)庫(kù)管理平臺(tái)。
轉(zhuǎn)載請(qǐng)注明出處:拓步ERP資訊網(wǎng)http://www.vmgcyvh.cn/
本文標(biāo)題:Oracle 數(shù)據(jù)庫(kù)性能優(yōu)化分析與配置
本文網(wǎng)址:http://www.vmgcyvh.cn/html/support/11121510916.html