為了更高的調(diào)整數(shù)據(jù)庫(kù)的初始化參數(shù),筆者認(rèn)為管理員在了解各個(gè)初始化參數(shù)的用途以及調(diào)整規(guī)則之前,需要先了解一些初始化參數(shù)調(diào)整的一些共性的內(nèi)容。具體來(lái)說(shuō),主要有以下幾個(gè)方面。
一般只有在大型應(yīng)用中或者數(shù)據(jù)據(jù)庫(kù)性能明顯下降時(shí)才需要修改這個(gè)初始化參數(shù)。所以從這個(gè)角度來(lái)講,初始化參數(shù)的調(diào)整算是Oracle數(shù)據(jù)庫(kù)中的一個(gè)高級(jí)應(yīng)用。但是這也是一個(gè)Oracle數(shù)據(jù)庫(kù)管理員必須要掌握的內(nèi)容。為了更高的調(diào)整數(shù)據(jù)庫(kù)的初始化參數(shù),筆者認(rèn)為管理員在了解各個(gè)初始化參數(shù)的用途以及調(diào)整規(guī)則之前,需要先了解一些初始化參數(shù)調(diào)整的一些共性的內(nèi)容。具體來(lái)說(shuō),主要有以下幾個(gè)方面。
一、需要了解哪些參數(shù)不用重新啟動(dòng)即可生效。
在Oracle數(shù)據(jù)庫(kù)中,根據(jù)生效的時(shí)間不同,可以把參數(shù)大致分為兩類(lèi)。一類(lèi)是必須重新啟動(dòng)后才能夠修改或者生效的參數(shù);另外一類(lèi)就是修改后不用重新啟動(dòng)即生效的參數(shù)。一般來(lái)說(shuō),數(shù)據(jù)庫(kù)管理員比較喜歡第二類(lèi)參數(shù),即修改后不需要重新啟動(dòng)立即生效的參數(shù)。為什么呢?因?yàn)閿?shù)據(jù)庫(kù)服務(wù)器投入生產(chǎn)使用之后,不能夠隨意重新啟動(dòng)。如果修改后需要重新啟動(dòng)才能夠生效,或者需要重新啟動(dòng)后才能夠修改參數(shù),那么在調(diào)整參數(shù)的過(guò)程中顯然需要中斷用戶(hù)的訪(fǎng)問(wèn),會(huì)增加停機(jī)時(shí)間。這對(duì)于數(shù)據(jù)庫(kù)部署來(lái)說(shuō),打擊會(huì)非常的大。因?yàn)閺姆(wěn)定性與可用性出發(fā),數(shù)據(jù)庫(kù)管理員是以最小的停機(jī)時(shí)間為目標(biāo)的。而此時(shí)人為的增加停機(jī)時(shí)間,顯然跟這個(gè)目標(biāo)有沖突。所以,數(shù)據(jù)庫(kù)管理員就需要知道哪些參數(shù)是不用重新啟動(dòng)就可以修改與生效的;而哪些參數(shù)則必須重新啟動(dòng)才可以。這是數(shù)據(jù)庫(kù)管理員再調(diào)整參數(shù)之前首先需要知道的內(nèi)容。一方面管理員可以根據(jù)這個(gè)特性,來(lái)評(píng)估停機(jī)的損失與調(diào)整參數(shù)可能帶來(lái)的收益。如果收益大于損失的話(huà),那么仍然有調(diào)整初始化參數(shù)的必要。二是來(lái)確定參數(shù)調(diào)整的時(shí)間。哪些不需要重新啟動(dòng),即調(diào)整參數(shù)不會(huì)導(dǎo)致停機(jī)的情況下,則參數(shù)的調(diào)整時(shí)間相對(duì)來(lái)說(shuō)靈活一點(diǎn),限制不多。但是如果需要調(diào)整重新啟動(dòng)才能夠生效或者修改的參數(shù),那么就需要選擇一個(gè)合適的時(shí)機(jī)了。如需要選擇晚上12點(diǎn)以后的時(shí)間,這個(gè)時(shí)段往往使用數(shù)據(jù)庫(kù)的用戶(hù)并不是很多。當(dāng)然這個(gè)時(shí)間每個(gè)起夜都可能不同?傊褪沁x擇一個(gè)使用數(shù)據(jù)庫(kù)用戶(hù)盡量少的時(shí)候。如此的話(huà),才能夠在最大程度上降低數(shù)據(jù)庫(kù)停機(jī)造成的損失。
那么哪些參數(shù)不需用重新啟動(dòng)就可以被修改呢?其實(shí),數(shù)據(jù)庫(kù)管理員只需要查詢(xún)動(dòng)態(tài)視圖,即可以知道哪些參數(shù)不用關(guān)閉或者重新啟動(dòng)就可以更改。如在動(dòng)態(tài)視同v$parameter中,存儲(chǔ)著初始化參數(shù)的值。一般來(lái)說(shuō),可以在查詢(xún)語(yǔ)句中加入條件issys_modifiable‘FALSE’ or isses_modifiable‘FALSE’(注意他們之間是or的關(guān)系,而不是and關(guān)系),最后查詢(xún)出來(lái)的參數(shù)就是不用關(guān)閉或者重新啟動(dòng)數(shù)據(jù)庫(kù)就可以設(shè)置的初始化參數(shù)。同時(shí)這些參數(shù)也是可以利用ALTER SYSTEM與ALTER SESSION命令可以更改的部分初始化參數(shù)。也就是說(shuō),不用關(guān)閉或者重新啟動(dòng)數(shù)據(jù)庫(kù)就可以修改的參數(shù)都可以使用上面兩個(gè)命令來(lái)進(jìn)行重新設(shè)置。但是并不是說(shuō),利用這兩個(gè)命令都可以在不用重新啟動(dòng)或者關(guān)閉數(shù)據(jù)庫(kù)的情況更改初始化參數(shù)。簡(jiǎn)單的說(shuō),就是可以利用這兩個(gè)命令來(lái)更改的參數(shù),有些需要重新啟動(dòng)或者關(guān)閉數(shù)據(jù)庫(kù),而有些則不用。
二、根據(jù)20/80原則來(lái)確定需要更改的參數(shù)。
Oracle數(shù)據(jù)庫(kù)中的初始化參數(shù)有上百個(gè)。無(wú)論出于什么目的,去一一調(diào)整這些參數(shù)往往是不現(xiàn)實(shí)的。一個(gè)優(yōu)秀的數(shù)據(jù)庫(kù)管理員,只需要掌握其中少數(shù)幾個(gè)參數(shù)的修改即可。往往掌握這幾個(gè)參數(shù)的修改方法、原則以注意事項(xiàng),就可以完成大部分的數(shù)據(jù)庫(kù)維護(hù)任務(wù)。這就是20/80的規(guī)律在其作用。也就是說(shuō),只需要掌握20%的參數(shù)(其實(shí)還遠(yuǎn)遠(yuǎn)不到這個(gè)比例),就可以完成80%的任務(wù)(其實(shí)遠(yuǎn)遠(yuǎn)高于這個(gè)比例)。也就是說(shuō),10/90規(guī)則對(duì)這個(gè)Oracle初始化參數(shù)來(lái)說(shuō),可能更加的適用?傊P者要說(shuō)的就是,只需要掌握眾多初始化參數(shù)中的少數(shù)幾個(gè)即可。即使需要通過(guò)調(diào)整初始化參數(shù)來(lái)提高數(shù)據(jù)庫(kù)性能或者其他目的的,也就是在這幾個(gè)少數(shù)的初始化參數(shù)中。對(duì)于其他的參數(shù),數(shù)據(jù)庫(kù)管理員只需要了解其用途,而不需要了解該如何調(diào)整這些參數(shù)。因?yàn)橛龅降膸茁士梢哉f(shuō)基本沒(méi)有。
那么這些重要的參數(shù)到底有哪些呢?主要有以下幾個(gè)參數(shù)。最重要的一個(gè)參數(shù)就是 DB_CACHE_SIZE.這是一個(gè)用來(lái)調(diào)整數(shù)據(jù)庫(kù)緩存大小的參數(shù)。在必要的時(shí)候,調(diào)整這個(gè)參數(shù)的大小,可以提高數(shù)據(jù)緩存的命中率,從而大幅度的提高數(shù)據(jù)庫(kù)的性能。第二個(gè)參數(shù)是DB_BLOCK_SIZE.這個(gè)參數(shù)主要是用來(lái)指定數(shù)據(jù)庫(kù)在建立時(shí)所默認(rèn)的塊大小。如果塊設(shè)置的比較小,則有可能會(huì)發(fā)生行鏈化現(xiàn)象,從而降低數(shù)據(jù)庫(kù)的性能;也有可能增加數(shù)據(jù)庫(kù)的碎片,浪費(fèi)表空間的存儲(chǔ)空間以及降低數(shù)據(jù)庫(kù)的查詢(xún)性能等等。所以根據(jù)需要有時(shí)候也要調(diào)整這個(gè)塊大小來(lái)改善數(shù)據(jù)庫(kù)的性能。第三個(gè)參數(shù)是SHARED_POOL_SIZE參數(shù)。這個(gè)參數(shù)主要是為那些數(shù)據(jù)字典緩存和共享SQL語(yǔ)句指定了在SGA里所分配的內(nèi)存。簡(jiǎn)單的來(lái)說(shuō),合理配置這個(gè)參數(shù),能夠同等的共享SQL語(yǔ)句。調(diào)整這個(gè)參數(shù),也是一種優(yōu)化數(shù)據(jù)庫(kù)性能的常用手段。第四個(gè)參數(shù)為SGA_MAX_SIZE參數(shù),這個(gè)參數(shù)指定了SGA可以動(dòng)態(tài)增長(zhǎng)的最大內(nèi)存。在SQLServer數(shù)據(jù)庫(kù)中也有類(lèi)似的參數(shù)。一般來(lái)說(shuō),在同臺(tái)數(shù)據(jù)庫(kù)服務(wù)器中若部署有多個(gè)應(yīng)用服務(wù)的話(huà),則往往需要合理配置這個(gè)參數(shù)來(lái)避免多個(gè)應(yīng)用服務(wù)之間爭(zhēng)用內(nèi)存。如果這個(gè)參數(shù)設(shè)置的不合適的話(huà),則有時(shí)候會(huì)導(dǎo)致另外一種應(yīng)用服務(wù)由于沒(méi)有足夠的內(nèi)存而停止服務(wù)。第五個(gè)參數(shù)為L(zhǎng)OG_CHECKPOINT_INTERVAL.這個(gè)參數(shù)主要用來(lái)設(shè)置檢查點(diǎn)的頻率。在每個(gè)檢查點(diǎn)中,數(shù)據(jù)庫(kù)系統(tǒng)執(zhí)行數(shù)據(jù)寫(xiě)出,將所有臟塊(已經(jīng)修改還沒(méi)有保存到硬盤(pán)中的數(shù)據(jù))寫(xiě)入到數(shù)據(jù)庫(kù)中對(duì)應(yīng)的數(shù)據(jù)文件中。默認(rèn)情況下,如果在數(shù)據(jù)庫(kù)緩存中有1/4的數(shù)據(jù)緩沖區(qū)是臟緩沖區(qū),則數(shù)據(jù)庫(kù)系統(tǒng)會(huì)自動(dòng)執(zhí)行檢查點(diǎn)。另外一個(gè)強(qiáng)制的原則就是在進(jìn)行日志切換時(shí),也會(huì)執(zhí)行檢查點(diǎn)。在一些特定的情況下,如建立數(shù)據(jù)倉(cāng)庫(kù),需要調(diào)整這個(gè)參數(shù)以滿(mǎn)足特定場(chǎng)合的需要。
這五個(gè)參數(shù)是筆者這幾年工作以上遇到的最頻繁的初始化參數(shù)。基本上數(shù)據(jù)庫(kù)維護(hù)與性能調(diào)優(yōu)就是圍繞著這幾個(gè)參數(shù)來(lái)的。為此筆者建議,各位數(shù)據(jù)庫(kù)管理員在學(xué)習(xí)數(shù)據(jù)庫(kù)初始化參數(shù)的調(diào)整技巧時(shí),可以從這幾個(gè)參數(shù)出發(fā)。或者說(shuō),這幾個(gè)參數(shù)是數(shù)據(jù)庫(kù)管理員必須要掌握的。不只是簡(jiǎn)單的了解,而是需要吃透它。只有如此,在遇到情況時(shí),才可以判斷是否需要進(jìn)行更改,以及應(yīng)對(duì)在更改過(guò)程中可能出現(xiàn)的問(wèn)題。對(duì)于其他的一些參數(shù),筆者認(rèn)為數(shù)據(jù)庫(kù)管理員只需要了解其基本用途即可。或許筆者在總結(jié)這些參數(shù)的時(shí)候,有漏掉的地方,歡迎大家來(lái)補(bǔ)充。以后若有機(jī)會(huì),筆者也會(huì)像大家詳細(xì)介紹在什么情況下該調(diào)整什么參數(shù);以及在調(diào)整過(guò)程中可能會(huì)遇到的麻煩。大家若對(duì)這方面的話(huà)題感興趣,可以關(guān)注筆者后面的文章。
三、使用SPFILE來(lái)動(dòng)態(tài)修改參數(shù)。
在Oracle10G以后的版本中,還允許數(shù)據(jù)庫(kù)管理員使用一個(gè)SPFILE來(lái)存儲(chǔ)實(shí)例參數(shù)的動(dòng)態(tài)修改。在10G以前的版本中,除非將參數(shù)手動(dòng)的添加到初始參數(shù)文件中,否則動(dòng)態(tài)的修改參數(shù)在數(shù)據(jù)庫(kù)重新啟動(dòng)后都會(huì)丟失。這跟環(huán)境變量的設(shè)置有些類(lèi)似。但是在10G以后的版本中,在這方面有了很大的改善。如開(kāi)啟SPFILE機(jī)制的話(huà),則系統(tǒng)就會(huì)啟用一個(gè)服務(wù)器參數(shù)文件,在內(nèi)存中動(dòng)態(tài)改變某些參數(shù)的時(shí)候,同時(shí)將這些改變記錄到這個(gè)服務(wù)器參數(shù)文件中。等到下次重新啟動(dòng)時(shí),服務(wù)器會(huì)讀取喜歡個(gè)服務(wù)器參數(shù)文件中的值,用來(lái)初始化數(shù)據(jù)庫(kù)系統(tǒng)。也就是說(shuō),從現(xiàn)在開(kāi)始一些動(dòng)態(tài)修改的參數(shù)也可以永久生效了。這對(duì)于數(shù)據(jù)庫(kù)管理員來(lái)說(shuō),無(wú)疑是一個(gè)福音。
從以上的分析中可以看出,這個(gè)數(shù)據(jù)庫(kù)參數(shù)的調(diào)整還是一個(gè)比較復(fù)雜的工作。筆者認(rèn)為,管理員在學(xué)習(xí)如何調(diào)整這個(gè)參數(shù)之前,需要先了解上面這些共性的內(nèi)容。即參數(shù)修改的時(shí)間限制、最可能需要調(diào)整的參數(shù)以及如何讓動(dòng)態(tài)參數(shù)永遠(yuǎn)生效等等。這些是做好參數(shù)優(yōu)化工作的基礎(chǔ)。