Oracle數(shù)據(jù)庫11g五大特點與自我調整
在這里,我首先簡單的介紹一下Oracle11g的五大特點,接著詳細介紹其自我調整。
Oracle11g最突出的五大特性是:
相比在無壓縮格式下存儲數(shù)據(jù),新的Oracle數(shù)據(jù)壓縮技術能夠確保以較小的開銷節(jié)省三倍以上的磁盤存儲空間。這一點比僅節(jié)省磁盤空間要具有更大的優(yōu)勢,因為它能夠使企業(yè)節(jié)約更多的開支,以便有更多的資金來鞏固自己的地位,中型企業(yè)尤其適合。
自動診斷知識庫(Automatic Diagnostic Repository,ADR)是專門針對嚴重錯誤的知識庫。該知識庫基本上能夠自動完成一些以往需要由數(shù)據(jù)庫管理員來手動完成的操作。
作為ADR的一部分,SQL性能分析器(SQL Performance Analyzer,SPA)是最令人興奮的特性之一。SQL性能分析器是一個整體調整工具,管理員可以通過該工具在數(shù)據(jù)庫上定義和重演(replay) 一個典型的工作負載,之后管理員可以調節(jié)整體參數(shù)來使數(shù)據(jù)庫盡快的達到最佳性能——而這一任務同樣也是許多年以來由數(shù)據(jù)庫管理員手動完成的。
由于獲得了最優(yōu)的初始參數(shù),數(shù)據(jù)庫管理員就不需要調整數(shù)以萬計的SQL語句。管理員需要做的就是給定一個典型的負載 ,由SAP根據(jù)歷史記錄來決定SQL的最終設置,而不用管理員來檢測哪一個SQL設置是最合理的。
多年以來,甲骨文公司一直在努力完成地另一個新特性便是“聯(lián)機更新”(在不down機的情況下更新軟件)。實際上,很難從軟件工程的角度來設計一個運行時能自動升級的軟件。由于真正的應用集群(Real Application Clusters ,RAC)特性,甲骨文公司再一次對其他的數(shù)據(jù)庫供應商造成了更大的壓力。在實際的使用過程中,數(shù)據(jù)庫產品的用戶總是希望產品有持續(xù)的高可用性,這并不是說只需滿足下次補丁更新之前的3年的時間就夠了。
自動內存管理(Automatic Memory Management,AMM)這一特性可以追溯到Oracle 9i,那時甲骨文公司推出首款自動調節(jié)存儲池的工具。AMM工具其實就是一種探測機制。實際上,Oracle11g 有很多隨機訪問存儲池,當AMM探測到某個存儲池中已滿時,它將整個RAM從一個區(qū)域分配到其他合適的區(qū)域。
簡言之,Oracle11g是功能非常強大,技術極先進的。希望有更多的朋友來學習她,使用她,研究她。好,讓我們再來詳細了解一下她的自我調整:
如何讓數(shù)據(jù)庫能夠實現(xiàn)自我調整,減輕數(shù)據(jù)庫管理員的工作量,是甲骨文公司一直追求的目標。畢竟其數(shù)據(jù)庫的復雜程度遠遠超出同類數(shù)據(jù)庫;而且,其數(shù)據(jù)庫的維護成本也比其他數(shù)據(jù)庫要高出不少。所以,甲骨文公司追求Oracle數(shù)據(jù)庫的自我調整與優(yōu)化,降低Oracle數(shù)據(jù)庫的維護成本,也是可以理解的。
自我調整SGA與自我調整檢查點,雖然是Oracle數(shù)據(jù)庫10G版本中的新增功能,但是,在11G的版本中,才真正發(fā)揮到極致,被數(shù)據(jù)庫管理員充分肯定并積極采納。下面我結合實際的工作經驗,帶領大家一起看看,這兩個新特性,是如何幫助企業(yè)降低維護成本,提高數(shù)據(jù)庫的管理效率的。
一、 自我調整檢查點。
在以前的文章中,我談到過,Oracle數(shù)據(jù)庫中有存儲緩沖區(qū),其包括三部分內容,一種叫做臟緩沖存儲區(qū)。這個緩沖存儲區(qū)中存儲的是已經被修改的數(shù)據(jù)。一般情況下,這個數(shù)據(jù)不會馬上被寫入到數(shù)據(jù)文件中去。除非空閑緩沖快用完了,這個數(shù)據(jù)才會被寫入數(shù)據(jù)文件。但是,如此的話,也會遇到一個問題,若空閑緩沖區(qū)剛用完的時候,其他用戶也在頻繁的對數(shù)據(jù)庫進行讀寫操作,在這個繁忙的時刻,再往數(shù)據(jù)庫文件中寫入更改后的數(shù)據(jù),那么,很明顯,會極大的影響數(shù)據(jù)庫的性能。
所以,作為數(shù)據(jù)庫管理員,我們的設想是能否在I/Q操作比較空的時候,就把臟緩沖中的數(shù)據(jù)寫入到數(shù)據(jù)庫中去呢?這若是靠數(shù)據(jù)庫管理員手工管理肯定不現(xiàn)實,我們數(shù)據(jù)庫有這個自動判斷的功能。甲骨文好像聽到了我們眾多數(shù)據(jù)庫管理員的呼聲,在10G版本的數(shù)據(jù)庫中新增了這個功能,并在11G版本中進行了完善,這就是自我調整檢查點的自我調整功能。
檢查點是將內存中修改的數(shù)據(jù)與數(shù)據(jù)庫中的數(shù)據(jù)文件同步的手段。Oracle數(shù)據(jù)庫定期將檢查點之間修改的數(shù)據(jù)寫入數(shù)據(jù)文件,這種做法的要求之一是需要服務器有足夠的可用內存,以提高為即將進行的操作尋找空閑內存的執(zhí)行性能。
所以,這個檢查點的設置,跟很多參數(shù)有關,如服務器的內存等等。雖然在以前的版本中,數(shù)據(jù)庫管理員可以通過設置相關的初始化參數(shù),來指定預期的崩潰恢復時間。但是,實際上,由于這個設置復雜,影響因素眾多,所以,很少有數(shù)據(jù)庫管理員會去調整這個參數(shù),而都是采用其默認的設置。
我在使用Oracle11g數(shù)據(jù)庫中,印象最深的是數(shù)據(jù)庫可以自我調整檢查點。雖然在10G中也已經提出了這個功能,但是用的總是不怎么順心。在11G中作了一定的改善,從而使得這個新功能得到了大家的認同。使用數(shù)據(jù)庫的自動檢查點調整,數(shù)據(jù)庫就會自動判斷數(shù)據(jù)庫的繁忙程度,具體的說是判斷I/Q 操作的繁忙程度,數(shù)據(jù)庫會自動在其比較空閑的時候,把臟緩沖期中的內容寫入到數(shù)據(jù)文件中,從而降低對數(shù)據(jù)庫吞吐量所產生的影響,提高數(shù)據(jù)庫的操作性能。
其實,這個檢查點的自我調整功能就好像是一個交通警察,當?shù)缆贩泵Φ臅r候,下班高峰期時,一些打掃衛(wèi)生的清潔車就不能進入車道;只有到道路比較空閑的時候,清潔車才能進入車道打掃衛(wèi)生。從而把清潔車對于車道的正常運行的影響降低到最低。
當然,這個改善可能用戶一下子還察覺不出來。
但是,我們通過數(shù)據(jù)庫日志進行前后的對比,就會發(fā)現(xiàn),兩者的差異是很大的。利用了數(shù)據(jù)庫檢查點自我調整功能后,數(shù)據(jù)庫的查詢性能,特別是查詢大量數(shù)據(jù)的性能,得到了比較顯著的改善。
不過,話說回來,數(shù)據(jù)庫的自我調整功能雖然是一個不錯的“交通警察”,但是當車真的很多的時候,最好的“交通警察”,也是無能為力。此時,就需要對硬件上的改善,如增加服務器的內存等等。畢竟像數(shù)據(jù)檢查點等自我調整功能只能夠改善硬件的利用能力,而不能從本質上提升硬件的容量。
二、 自我調整系統(tǒng)全局區(qū)。
SGA是一個英文簡稱,中文的意思是系統(tǒng)全局區(qū)。它是一個存儲區(qū)域,被所有用戶所共享。系統(tǒng)全局區(qū)內就像是一個個格子,每個格子就是一個存儲組件,用來存放為滿足每類內存分配需求而使用的內存池。例如用戶最近查詢過的數(shù)據(jù)塊就會被保存在其中的一個格子里;數(shù)據(jù)庫的結構等變化需求等也會被存儲在這些格子中。
現(xiàn)在就遇到一個問題,格子大小的問題。若格子太大,整個格子只裝了不到三分之一的內容,那么明顯是一種浪費,這些空間本來是可以被用作其他用途的;若格子太小,信息存放不下去了,就又會發(fā)生內存分配錯誤。
如果數(shù)據(jù)庫管理員自己來調整這些格子的大小,那么難度也是可想而知的。因為這些空間的需求量是不確定的,隨著業(yè)務的不同,其需要的容量也隨之改變。所以,數(shù)據(jù)庫管理員希望數(shù)據(jù)庫能夠對系統(tǒng)全局區(qū)進行動態(tài)分配,能夠讓數(shù)據(jù)庫根據(jù)實際的需要量,劃分這些格子的存儲空間。當然有個前提,就是其不超出總的容量大小。
在Oracle 10G與11G的數(shù)據(jù)庫系統(tǒng)中,增加并完善了這方面的功能,實現(xiàn)了對于系統(tǒng)全局區(qū)的動態(tài)分配功能。也就是說,我們數(shù)據(jù)庫管理員,只需要制定一個系統(tǒng)全局區(qū)的總大小,然后,里面的格子怎么分,就不需要我們關心了。Oracle數(shù)據(jù)庫會自己根據(jù)里面居住的客人數(shù)量的多少,進行分配。Oracle數(shù)據(jù)庫會擔負起在整個系統(tǒng)全局區(qū)內部進行優(yōu)化內存分配對一個重任。數(shù)據(jù)庫有了這個改進之后,這些房間的大小就不是固定的,而是會隨著業(yè)務量的不同而實現(xiàn)動態(tài)的梗概。如此的話,一方面,房間的空間不會被浪費,不會一個房間很擠而其他房間很空;另一方面,也不會因為存儲信息的時候因為空間不夠而發(fā)生內存存儲錯誤。
通過這個自我調整系統(tǒng)全局區(qū)的功能,Oracle數(shù)據(jù)庫會智能地對數(shù)據(jù)庫服務器的內存進行合理的分配,提高內存的使用效率,提高數(shù)據(jù)庫的性能。
不過,這兩項功能,都提供了自定義的功能,如可以自己定義系統(tǒng)全局區(qū)的總大小以及檢查點的恢復時間等等。雖然定義起來比較簡單,但是,有個問題就是定義多大才使合理的呢?這個很難確定。因為這根據(jù)企業(yè)應用不同而有所區(qū)別,沒有什么可以參考的標準。一般情況下,數(shù)據(jù)庫管理員可能需要觀測數(shù)據(jù)庫性能達一年以上,才能夠取得一個合理的值。所以,我的建議是,剛開始的時候,就采取默認的設置。讓數(shù)據(jù)庫自己根據(jù)服務器的硬件配置,去取得合理的參數(shù)。在以后若有必要的時候,再根據(jù)相關的信息,去設置一個合理的值。