原題:Oracle RAC建設(shè)過程中必須要知和要做的事情 作者:趙海,某城商行系統(tǒng)架構(gòu)師,專注并擅長銀行數(shù)據(jù)中心解決方案規(guī)劃及設(shè)計(jì)。
數(shù)據(jù)庫建設(shè)過程中缺少可以遵循的實(shí)踐標(biāo)準(zhǔn),知識(shí)點(diǎn)和經(jīng)驗(yàn)點(diǎn)散落四處難以快速形成邏輯性強(qiáng)的參照標(biāo)準(zhǔn),面對(duì)項(xiàng)目令人無從下手。本文是基于數(shù)據(jù)建設(shè)的規(guī)劃、實(shí)施以及配置優(yōu)化等階段對(duì)大量文獻(xiàn)的總結(jié)提煉,以及從項(xiàng)目的實(shí)踐出發(fā),對(duì)數(shù)據(jù)庫建設(shè)過程中各個(gè)層面應(yīng)該注意的事項(xiàng)進(jìn)行的總結(jié)。優(yōu)質(zhì)長文,建議先收藏后看。
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),清豐企業(yè)網(wǎng)站建設(shè),清豐品牌網(wǎng)站建設(shè),網(wǎng)站定制,清豐網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,清豐網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
1.背景描述
數(shù)據(jù)庫建設(shè)是每一個(gè)企業(yè)數(shù)據(jù)中心建設(shè)過程中非常重要的一個(gè)環(huán)節(jié),直接關(guān)系到業(yè)務(wù)連續(xù)性和穩(wěn)定性。但是我們?cè)跀?shù)據(jù)庫建設(shè)過程當(dāng)中卻很少有可以遵循的實(shí)踐標(biāo)準(zhǔn)。當(dāng)我們面對(duì)整個(gè)建設(shè)項(xiàng)目的規(guī)劃設(shè)計(jì)和配置優(yōu)化的時(shí)候,又覺得無從下手。散落在官方網(wǎng)站上的一些知識(shí)點(diǎn)和經(jīng)驗(yàn)點(diǎn)無法讓我們快速形成一個(gè)具有很強(qiáng)邏輯性的參照標(biāo)準(zhǔn)。本文希望通過以下篇幅的總結(jié)和分析,從各個(gè)層面給予實(shí)踐標(biāo)準(zhǔn),為日后從事數(shù)據(jù)庫建設(shè)的項(xiàng)目提供一個(gè)參考思路。
2.存儲(chǔ)規(guī)劃設(shè)計(jì)的關(guān)鍵點(diǎn) 2.1 OCR/VOTE磁盤的合理規(guī)劃事項(xiàng)
什么是OCR/VOTE磁盤,它在集群中是什么樣的角色呢?
ORACLE RAC ASM管理模式下,磁盤組通常有三個(gè)(+DATA,+FRA,+OCR),在OCR磁盤組當(dāng)中所有的磁盤中存儲(chǔ)的數(shù)據(jù)包括兩部分,一部分是Vote File,另外一部分就是OCR(Oracle Cluster Registry)。Vote File是用來記錄集群節(jié)點(diǎn)的磁盤心跳信息,而OCR是保存集群配置信息的數(shù)據(jù)。Vote File,以整個(gè)文件的方式存儲(chǔ)在OCR磁盤上,不做任何條帶。下圖是其信息記錄的一個(gè)說明:
以上是一個(gè)三節(jié)點(diǎn)的ORACLE RAC集群的Vote FIle的一個(gè)示意矩陣,每一行是一個(gè)節(jié)點(diǎn)的寫入的信息,例如第一行,Instance1分別把其對(duì)集群中的三個(gè)成員(1、2、3)進(jìn)行私網(wǎng)檢測(cè)的結(jié)果寫入到仲裁文件當(dāng)中,Instance2、Instance3同樣把其檢測(cè)結(jié)果寫入仲裁文件,最終組成了三個(gè)節(jié)點(diǎn)的仲裁矩陣。當(dāng)私網(wǎng)發(fā)生故障而從網(wǎng)絡(luò)上導(dǎo)致集群分割為幾個(gè)孤島子集的時(shí)候,集群是通過這個(gè)文件的信息來判斷最后存活的節(jié)點(diǎn)。具體算法有兩個(gè)非常重要的規(guī)則:
1. 保障隔離后的集群子集中節(jié)點(diǎn)數(shù)目最多的子集存活。
2. 當(dāng)隔離后的集群子集獲得的仲裁票數(shù)相等時(shí),保障實(shí)例號(hào)小者存活。
對(duì)于Vote File本身的數(shù)目來講,Oracle又有一個(gè)非常重要的規(guī)則:集群節(jié)點(diǎn)獲得的Vote File數(shù)目小于N/2+1時(shí),節(jié)點(diǎn)就會(huì)被集群驅(qū)逐出集群,N是Vote File的總數(shù)目。也就是說集群中所有節(jié)點(diǎn)獲得的Vote File數(shù)目必須要大于等于N/2+1。
根據(jù)以上結(jié)果來看,對(duì)于VOTE磁盤組的規(guī)劃,首先偶數(shù)個(gè)仲裁磁盤必然會(huì)造成一個(gè)浪費(fèi)。那么我們就沒有必要選擇偶數(shù)仲裁磁盤。然后我們?cè)倏紤]磁盤組磁盤的容錯(cuò)能力,為了保障我們至少有1份磁盤容錯(cuò)能力,我們的仲裁磁盤至少是3塊兒。也就是說對(duì)于OCR磁盤組的規(guī)劃來講,至少保障其內(nèi)有三個(gè)容錯(cuò)組,每一個(gè)容錯(cuò)組里面一塊兒仲裁磁盤。
對(duì)于OCR來講,它屬于集群的資源注冊(cè)信息,是集群運(yùn)行的前提條件。所以一定要保障它的高可用性。由于它屬于配置數(shù)據(jù),那么一定會(huì)遵循ORACLE ASM的磁盤冗余策略(External、Normal、High)。也就是說OCR在OCR磁盤組里面可以擁有1份、2份、3份鏡像。每份鏡像的數(shù)據(jù)條帶會(huì)落在一個(gè)獨(dú)立的容錯(cuò)組里。
綜上所述,對(duì)于OCR磁盤組的規(guī)劃,為了保障仲裁盤的至少一份的容錯(cuò)能力以及OCR數(shù)據(jù)的高冗余策略,我們應(yīng)該至少將磁盤組內(nèi)規(guī)劃為3個(gè)磁盤,每一個(gè)磁盤落在一個(gè)獨(dú)立的容錯(cuò)組。磁盤大小建議為1GB以上(雖然OCR Device = 300M左右)。
2.2 存儲(chǔ)外部冗余架構(gòu)設(shè)計(jì)
首先一定要用多路徑軟件對(duì)Lun進(jìn)行路徑管理,并且保障鏈路切換策略為負(fù)載均衡模式。對(duì)于鏈路的數(shù)目來講最佳為8條鏈路。而且需要保證這8條鏈路在光纖口、光纖卡、接入交換機(jī)、核心交換機(jī)、存儲(chǔ)控制器5個(gè)層面上的冗余。例如2張雙口光纖卡,每個(gè)光纖卡通過各自接入交換機(jī)連接到不同的兩個(gè)核心交換機(jī)上,核心交換機(jī)又分別與兩個(gè)存儲(chǔ)控制器的前端口相連接。在光纖交換機(jī)的zone配置里,每一個(gè)主機(jī)光纖口wwn和存儲(chǔ)的一個(gè)前端口wwn配置在一個(gè)zone里面,端口比例為1:2,總共有8個(gè)zone。用示意圖的方式表示如下:
2.3 NFS架構(gòu)的存儲(chǔ)配置參數(shù)
Orace RAC的ASM磁盤可以是網(wǎng)絡(luò)存儲(chǔ)架構(gòu)實(shí)現(xiàn)的Lun,當(dāng)然我們也可以利用文件系統(tǒng)或者裸盤作為數(shù)據(jù)庫的存儲(chǔ)資源。但是在掛載NFS卷的時(shí)候,有若干參數(shù)是值得我們注意的。
1)Hard/soft:當(dāng)應(yīng)用進(jìn)程發(fā)送一個(gè)請(qǐng)求,Hard情況下,客戶端遇到錯(cuò)誤不會(huì)立即通知應(yīng)用,而是在后臺(tái)進(jìn)行重試直到正常,這會(huì)導(dǎo)致應(yīng)用進(jìn)程的阻塞;Soft情況下,客戶端會(huì)立刻通知應(yīng)用導(dǎo)致應(yīng)用掛起。從這個(gè)意義上來講,Soft對(duì)應(yīng)用的響應(yīng)速度會(huì)比Hard好,但是如果網(wǎng)絡(luò)不穩(wěn),那么Soft有可能導(dǎo)致應(yīng)用數(shù)據(jù)被損壞。這也是Oracle建議將這個(gè)參數(shù)設(shè)置為Hard的理由。
2)Rsize/Wsize:客戶端從服務(wù)器端讀寫文件的最大數(shù)目(byte)/每次請(qǐng)求。如果該參數(shù)不做設(shè)置的話,那么它是通過客戶端和服務(wù)器端的協(xié)商完成的。一般建議設(shè)置為固定的32768。
3)Timeo: 建議為600(60秒)。
4)Intr/nointr: 是否允許接受文件操作的中斷信號(hào),一般而言設(shè)置為nointr。
5)Noac/ac: ac情況下,客戶端會(huì)緩存文件屬性信息,從而提高客戶端的讀性能。Noac情況下,客戶端不會(huì)緩存文件屬性信息,任何情況下的讀都是NFS文件系統(tǒng)上文件的實(shí)時(shí)版本信息。Ac情況下,客戶端會(huì)定期掃描Server端的文件實(shí)時(shí)信息,其他時(shí)候都是讀取自己緩存的信息。NFS卷作為數(shù)據(jù)庫的存儲(chǔ)磁盤,只需要實(shí)時(shí)反映文件的真實(shí)版本信息即可,不需要客戶端再去做緩存,數(shù)據(jù)庫有自己的緩存機(jī)制。因此一般情況下Oracle建議將這個(gè)參數(shù)設(shè)置為Noac。
當(dāng)然這些參數(shù),根據(jù)不同的操作系統(tǒng)特點(diǎn)是會(huì)有一些差異。表2.3是摘自O(shè)racle官方發(fā)布的NFS存儲(chǔ)最佳實(shí)踐參數(shù)表當(dāng)中的一部分,可以提供通用參考。
2.4 ASM磁盤組規(guī)劃
(1)磁盤組相關(guān)
除了OCR磁盤組之外,一般建議建立磁盤組不超過2個(gè),一個(gè)是存放數(shù)據(jù)的數(shù)據(jù)磁盤組(+DATA),另外一個(gè)是存放日志的閃回區(qū)磁盤組(+FRA)。假設(shè)我們選擇磁盤組的冗余策略為Normal,那么建議磁盤數(shù)目為偶數(shù)個(gè)并且至少為4個(gè)相同大小相同性能配置,一方面考慮到冗余為2份,另外一方面保障Failure Group里面數(shù)目的條帶化分布,可以保障磁盤組的讀寫性能。如果是其他冗余策略,那么按照同樣的思路去選擇磁盤組的數(shù)目。另外Lun的大小不能超過2T(容易引起ORA-15196、ORA-15099問題)。
(2)磁盤分配單元及文件條帶
AU是ASM Disk Group磁盤空間分配單元。Strip實(shí)際上是文件層面的條帶,準(zhǔn)確說法應(yīng)該是文件的擴(kuò)展塊兒。對(duì)于文件的擴(kuò)展塊兒來講就是文件切割的單元。它有兩種模式(coarse & fine)。對(duì)于coarse模式來講,擴(kuò)展塊兒大小等于AU大小,對(duì)應(yīng)的參數(shù)固定不變(_asm_stripesize=AU,_asm_stripewidth=1)。對(duì)于fine模式來講,擴(kuò)展塊兒大小是可以進(jìn)行調(diào)整,根據(jù)我們的業(yè)務(wù)需求進(jìn)行適當(dāng)調(diào)整。例如設(shè)置為256K,那么原來1M的文件寫在一個(gè)磁盤中的AU中,那么現(xiàn)在可以并行寫入到賜個(gè)磁盤的4個(gè)AU當(dāng)中。充分發(fā)揮了小IO的并行讀寫性能。但是對(duì)于某些大IO的數(shù)據(jù)庫業(yè)務(wù),那么AU可以適當(dāng)調(diào)整到4M,同時(shí)啟用操作系統(tǒng)的大頁讀寫參數(shù)。文件擴(kuò)展塊兒可以保持corse模式。對(duì)于一般的OLTP業(yè)務(wù)來講,數(shù)據(jù)文件、歸檔文件一般設(shè)置為corse;而redo日志、控制文件、flashback日志設(shè)置為fine。對(duì)于11g之后的oracle,這些參數(shù)基本不需要我們?nèi)ブ鲃?dòng)調(diào)整,除非確實(shí)有性能問題與之相關(guān)。
2.5 ASM內(nèi)存管理參數(shù)
(1)內(nèi)存參數(shù)相關(guān)
? db_cache_size: 緩沖區(qū),存放metadata塊兒的buffer cache,建議值為64M。
? shared_pool: 管理ASM實(shí)例所需要的內(nèi)存池,建議值為128M。
? Large_pool: 用來存儲(chǔ) extent maps,建議值為64M。
(2)其他參數(shù)相關(guān)
在11g當(dāng)中,如果多個(gè)數(shù)據(jù)庫共享ASM實(shí)例的話,那么建議按照以下規(guī)則計(jì)算process的數(shù)目設(shè)置。
ASM processes = 25 + (10 + max(可能的并發(fā)數(shù)據(jù)文件變化))* 數(shù)據(jù)庫的數(shù)目。當(dāng)然這個(gè)數(shù)目需要一個(gè)經(jīng)驗(yàn)的評(píng)估,需要根據(jù)集群環(huán)境數(shù)據(jù)庫的情況以及業(yè)務(wù)IO的判斷來估算。
2.6 異步IO配置
一般來講數(shù)據(jù)庫應(yīng)用都是要啟用異步IO來提高數(shù)據(jù)庫的IO性能。同時(shí)需要打開操作系統(tǒng)的異步IO參數(shù)和數(shù)據(jù)庫的異步IO參數(shù)。以Linux為例,在操作系統(tǒng)層面需要設(shè)置參數(shù) aio-max-nr=1048576(11g 中設(shè)置為 4194304),表示同時(shí)可以擁有的異步IO請(qǐng)求數(shù)目。然后在Oracle數(shù)據(jù)庫層面設(shè)置以下兩個(gè)參數(shù):filesystemio_option=setall;disk_asynch_io=true。對(duì)于AIX來說,需要設(shè)置以下三個(gè)參數(shù)(aix_maxservers, aix_minservers,aio_maxreqs)對(duì)于OLTP業(yè)務(wù)來講,IBM官方的建議值為(800,200,16384)。
以上的參數(shù)值只是一個(gè)通用的參考,但是以上所述的參數(shù)具體配置的值還是需要根據(jù)自己環(huán)境的數(shù)據(jù)來評(píng)估。比如我們需要關(guān)注iostat中的io等待情況和aio的一系列指標(biāo)來判斷設(shè)置值的科學(xué)與否。
2.7 ASMLib & Udev
對(duì)于Linux平臺(tái)而言,Oracle RAC的ASM磁盤管理有三種方式(ASMlib、DM、udev),我們首選的方式是ASMlib,對(duì)于 RHEL6(從6.4開始),內(nèi)核驅(qū)動(dòng)軟件包'kmod-oracleasm'已經(jīng)在 Redhat 平臺(tái)上啟動(dòng),并且可以通過RedHat Network (RHN)上的"RHEL Server Supplementary (v. 6 64-bit x86_64)" 渠道進(jìn)行安裝。這個(gè)模塊的更新將會(huì)由 RedHat 提供。
對(duì)于ASMlib的方式,它是通過以下命令方式創(chuàng)建ASM磁盤:
# /usr/sbin/oracleasm createdisk disk_name device_partition_name
通過這種方式創(chuàng)建的ASM磁盤組名稱(disk_name),唯一綁定的是后面的device_partition_name,因此我們必須保障操作系統(tǒng)在日后的Lun變更過程中,這個(gè)命名是不能夠變更的。假設(shè)我們用的是第三方多路徑軟件管理方式實(shí)現(xiàn),那么需要通過多路徑管理軟件的方式來講磁盤的device_partition_name和磁盤的唯一ID關(guān)聯(lián)。例如emcpowerpath可以用emcadm export/import方式來保障Rac節(jié)點(diǎn)上的Lun名稱一致。
對(duì)于udev的方式,同樣道理我們需要將磁盤的scsi-id和最終形成的asm磁盤名稱進(jìn)行關(guān)聯(lián),而不是用磁盤在操作系統(tǒng)顯示的設(shè)備名來關(guān)聯(lián)。例如:
KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s %p", RESULT=="36000c29a972d7d5fe0bf683b21046b34", NAME="asmgrid_disk1", OWNER="grid", GROUP="asmadmin", MODE="0660"
其中的PROGRAM字段非常重要,它表示我們是用什么方式來關(guān)聯(lián)磁盤在操作系統(tǒng)和ASM之間的對(duì)應(yīng)關(guān)系。如果在日后的運(yùn)維過程中,隨著磁盤的增減變化或者服務(wù)器的重啟變更等導(dǎo)致了磁盤設(shè)備名發(fā)生變化,那么就會(huì)導(dǎo)致ASM磁盤符號(hào)紊亂,最終數(shù)據(jù)庫集群無法啟動(dòng)。當(dāng)然這個(gè)問題在11g之后就不存在了,因?yàn)?1g之后ASM自動(dòng)會(huì)去根據(jù)磁盤的唯一ID匹配ASM識(shí)別的磁盤ID,節(jié)點(diǎn)的讀寫是根據(jù)磁盤的ASM標(biāo)示來執(zhí)行的。但是從管理科學(xué)角度還是應(yīng)該按照最佳實(shí)踐來做從而保障沒有任何風(fēng)險(xiǎn)。
2.8 AIX平臺(tái)關(guān)注的存儲(chǔ)參數(shù)
對(duì)于AIX平臺(tái)而言,存儲(chǔ)卷的系統(tǒng)參數(shù)必須遵循以下規(guī)則。
(1) reserve_lock、reserve_policy
該兩個(gè)參數(shù)其實(shí)都是表示操作系統(tǒng)是否持有存儲(chǔ)卷的共享鎖方式。存儲(chǔ)陣列類型為SSA, FAStT, 或者其他 non-MPIO-capable disks,參數(shù)設(shè)置參照A。存儲(chǔ)陣列類型為SS, EMC, HDS, CLARiiON, 或者其他 MPIO-capable disks,參數(shù)設(shè)置方式參照B。
A. # chdev -l hdiskn -a reserve_lock=no
B. # chdev -l hdiskn -a reserve_policy=no_reserve
(2) 磁盤在加入ASM磁盤組之前,必須清除其盤頭PVID信息。否則就會(huì)導(dǎo)致ORA-15063、ORA-15040、ORA-15042等磁盤錯(cuò)誤。
(3) fc_err_recov。
該參數(shù)表示因?yàn)锳IX平臺(tái)下光纖斷掉場(chǎng)合下,讀寫錯(cuò)誤切換的時(shí)間。正常情況下,這個(gè)切換會(huì)導(dǎo)致數(shù)據(jù)庫IO掛起10分鐘。如果是Vote disk,就會(huì)導(dǎo)致集群重啟。為了避免此類情況發(fā)生需要把該參數(shù)的值設(shè)置為fast_fail,實(shí)現(xiàn)快速切換。
(4) max_transfer。
該參數(shù)建議設(shè)置最少為Oracle最大請(qǐng)求的IO大小,一般超過1M。
(5) queue_depth。
該參數(shù)表示Lun的最大IO隊(duì)列深度,這個(gè)參數(shù)的設(shè)置必須足以支撐數(shù)據(jù)庫并發(fā)讀寫的負(fù)載。
(6) max_xfer_size。
該參數(shù)表示光纖卡的最大傳輸大小,這個(gè)參數(shù)的設(shè)置必須與磁盤的吞吐參數(shù)保持倍數(shù)關(guān)系,并且必須大于磁盤設(shè)置的參數(shù)。
(7) num_cmd_elems。
該參數(shù)表示光纖卡接受的最大IO請(qǐng)求數(shù)目,這個(gè)參數(shù)同樣與磁盤的queue_depth有著倍數(shù)關(guān)系,具體值的設(shè)定需要看環(huán)境當(dāng)中光纖卡和其所容納Lun的數(shù)目。
3.網(wǎng)絡(luò)規(guī)劃設(shè)計(jì)的關(guān)鍵點(diǎn) 3.1 硬件及參數(shù)
從Oracle官方的推薦來看,他們首先推薦使用萬兆以太網(wǎng),至少使用千兆以太網(wǎng),負(fù)載如果很高那么私網(wǎng)可以采用infiniband。當(dāng)然這個(gè)完全取決于客戶生產(chǎn)環(huán)境的具體業(yè)務(wù)量及負(fù)載情況。這個(gè)僅僅是個(gè)參考,有條件的情況下可以按照推薦進(jìn)行配置。私網(wǎng)的連接需要使用交換機(jī),Oracle集群安裝并不支持私網(wǎng)的直連架構(gòu)。網(wǎng)卡及交換機(jī)的雙攻擊速率參數(shù)保持正確一致。
3.2 網(wǎng)卡綁定
各種平臺(tái)都有自己的網(wǎng)卡綁定工具,而且提供負(fù)載均衡和主備模式的綁定。首先為了提高公網(wǎng)和私網(wǎng)的網(wǎng)絡(luò)高可用,網(wǎng)卡需要綁定。對(duì)于Linux平臺(tái)我們需要在配置文件 “/etc/modprobe.d/dist.conf” 中將數(shù)mode來控制網(wǎng)卡綁定的具體策略:
? mod=0,即:(balance-rr)Round-robin policy(平衡掄循環(huán)策略)。
? mod=1,即: (active-backup)Active-backup policy(主-備份策略)。
? mod=2,即:(balance-xor)XOR policy(平衡策略)。
? mod=3,即:broadcast(廣播策略)。
? mod=4,即:IEEE 802.3ad Dynamic link aggregation(IEEE802.3ad 動(dòng)態(tài)鏈接聚合)。
? mod=5,即:(balance-tlb)Adaptive transmit load balancing(適配器傳輸負(fù)載均衡)。
? mod=6,即:(balance-alb)Adaptive load balancing(適配器適應(yīng)性負(fù)載均衡)。
對(duì)于私網(wǎng)網(wǎng)卡綁定方式mode=3&6會(huì)導(dǎo)致ORA-600,公網(wǎng)網(wǎng)卡綁定方式mode=6會(huì)導(dǎo)致BUG9081436。對(duì)于具體的綁定模式,對(duì)于平臺(tái)版本低而且網(wǎng)絡(luò)架構(gòu)非常復(fù)雜的場(chǎng)合,還是建議主備模式,因?yàn)橹鱾淠J礁€(wěn)定,不容易產(chǎn)生數(shù)據(jù)包路徑不一致的問題。如果是負(fù)載均衡模式的場(chǎng)合,如果網(wǎng)絡(luò)參數(shù)設(shè)置不是很科學(xué)的情況下,很容易出現(xiàn)從一個(gè)物理網(wǎng)卡發(fā)送報(bào)文,但是回報(bào)文卻回到另外一個(gè)物理網(wǎng)卡上,網(wǎng)絡(luò)鏈路再加入防火墻的規(guī)則之后,非常容易導(dǎo)致丟包問題發(fā)生。
而對(duì)于AIX平臺(tái)來講,將參數(shù)mode修改為NIB或者Standard值。Standard是根據(jù)目標(biāo)IP地址來決定用哪個(gè)物理網(wǎng)卡來發(fā)送報(bào)文,是基于IP地址的負(fù)載均衡,也不易產(chǎn)生上述的丟包問題。
3.3 SCAN
Oracle RAC,從11gr2之后增加了SCAN(Single ClientAccess Name)的特性。
SCAN是一個(gè)域名,可以解析至少1個(gè)IP,最多解析3個(gè)SCAN IP,客戶端可以通過這個(gè)SCAN 名字來訪問數(shù)據(jù)庫,另外SCAN ip必須與public ip和VIP在一個(gè)子網(wǎng)。啟用SCAN 之后,會(huì)在數(shù)據(jù)庫與客戶端之間,添加了一層虛擬的服務(wù)層,就是SCAN IP和SCAN IP Listener,在客戶端僅需要配置SCAN IP的tns信息,通過SCANIP Listener,連接后臺(tái)集群數(shù)據(jù)庫。這樣,不論集群數(shù)據(jù)庫是否有添加或者刪除節(jié)點(diǎn)的操作,均不會(huì)對(duì)客戶端產(chǎn)生影響,也就不需要修改配置。對(duì)于SCAN相關(guān)的配置,有以下一些配置注意事項(xiàng):
(1)主機(jī)的默認(rèn)網(wǎng)關(guān)必須與SCAN以及VIP在同一個(gè)子網(wǎng)上。
(2)建議通過 DNS,按round-robin方式將 SCAN 名稱(11gR2 和更高版本)至少解析為 3 個(gè) IP 地址,無論集群大小如何。
(3)為避免名稱解析出現(xiàn)問題,假設(shè)我們?cè)O(shè)置了三個(gè)SCAN地址,那么HOSTs文件當(dāng)中不能出現(xiàn)SAN的記錄,因?yàn)镠OSTs文件當(dāng)中的記錄是靜態(tài)解析,與DNS動(dòng)態(tài)解析相悖。
3.4 網(wǎng)絡(luò)參數(shù)
操作系統(tǒng)平臺(tái)上關(guān)于網(wǎng)絡(luò)的內(nèi)核參數(shù)非常重要,直接決定私網(wǎng)公網(wǎng)數(shù)據(jù)傳輸?shù)姆€(wěn)定性和性能。不過針對(duì)不同的操作系統(tǒng),相關(guān)的參數(shù)設(shè)置也各有差異。
1.Linux
對(duì)于Linux平臺(tái)的內(nèi)核參數(shù),有兩個(gè)非常重要(net.core.rmem_default、net.core.rmem_max)。具體功能解釋如下:
? net.ipv4.conf.eth#.rp_filter:數(shù)據(jù)包反向過濾技術(shù)。
? net.ipv4.ip_local_port_range:表示應(yīng)用程序可使用的IPv4端口范圍。
? net.core.rmem_default:表示套接字接收緩沖區(qū)大小的缺省值。
? net.core.rmem_max:表示套接字接收緩沖區(qū)大小的最大值。
? net.core.wmem_default:表示套接字發(fā)送緩沖區(qū)大小的缺省值。
? net.core.wmem_max:表示套接字發(fā)送緩沖區(qū)大小的最大值。
為了獲得更好的網(wǎng)絡(luò)性能,我們需要根據(jù)具體情況把以上兩個(gè)參數(shù)從其默認(rèn)值適當(dāng)調(diào)整為原來的2-3倍甚至更高,關(guān)閉或者設(shè)置反向過濾功能為禁用0或者寬松模式2。
2.AIX
對(duì)于AIX平臺(tái)的內(nèi)核參數(shù),以下設(shè)置是從Oracle官方文檔摘出的最佳配置:
tcp_recvspace = 65536;tcp_sendspace = 65536;
udp_sendspace = ((db_block_size *db_multiblock_read_count) + 4096) ;
udp_recvspace = 655360;
rfc1323 = 1;
sb_max = 4194304;
ipqmaxlen = 512;
第1、2個(gè)參數(shù)表示TCP窗口大小,第3、4個(gè)參數(shù)表示UDP窗口大小。rfc1323啟用由 RFC 1323(TCP 擴(kuò)展以得到高性能)指定的窗口定標(biāo)和時(shí)間圖標(biāo)。窗口定標(biāo)允許 TCP 窗口大小(tcp_recvspace 和 tcp_sendspace)大于 64KB(65536)并且通常用于大的 MTU 網(wǎng)絡(luò)。默認(rèn)為0(關(guān)),如果試圖將 tcp_sendspace 和 tcp_recvspace 設(shè)為大于 64 KB則需要先修改此值為1。ipqmaxlen 表示指定接收包的數(shù)目,這些包可以列在 IP 協(xié)議輸入隊(duì)列中。sb_max指定一個(gè) TCP 和 UDP 套接字允許的最大緩沖區(qū)大小。
3.5 安全配置事項(xiàng)
1.Linux平臺(tái)下的防火墻需要關(guān)閉,否則會(huì)引起公網(wǎng)或者私網(wǎng)的通訊問題。
# chkconfig iptables stop
2.Linux平臺(tái)下的selinux安全配置項(xiàng)需要關(guān)閉,配置文件為/etc/security/config。
SELINUX=disabled
3.如果是Power System主機(jī)的PowerVM虛擬化架構(gòu)下的AIX平臺(tái),如果發(fā)現(xiàn)Oracle RAC的兩個(gè)節(jié)點(diǎn)之間有大量丟包現(xiàn)象或者是以下幾種事件:
? Cache Fusion "block lost"
? IPC Send timeout
? Instance Eviction
? SKGXPSEGRCV: MESSAGE TRUNCATED user data nnnn bytes payload nnnn bytes
那么我們需要檢查VIOS分區(qū)操作系統(tǒng)的補(bǔ)丁信息,如果沒有APAR IZ97457,那么我們需要將這個(gè)補(bǔ)丁打上,詳細(xì)需到IBM官網(wǎng)找到相應(yīng)的補(bǔ)丁及其詳細(xì)解釋。
3.6 通用注意事項(xiàng)
1.系統(tǒng)主機(jī)名、域名等配置不允許有下劃線。
2.網(wǎng)卡名稱在兩個(gè)節(jié)點(diǎn)上保持一致(例:public->eth2e1,private->eth3e2)。
3.網(wǎng)卡設(shè)備名稱當(dāng)中不能包含“.”等特殊字符。
4.私網(wǎng)地址需遵守RFC1918標(biāo)準(zhǔn),采用其所規(guī)定的ABC三類企業(yè)內(nèi)部私網(wǎng)地址。否則會(huì)引起B(yǎng)UG4437727發(fā)生。A類:10.0.0.0 -10.255.255.255 (10/8比特前綴); B類:172.16.0.0 -172.31.255.255 (172.16/12比特前綴); C類:192.168.0.0 -192.168.255.255 (192.168/16比特前綴)。而且私網(wǎng)VLAN需要與上述no-routeable子網(wǎng)之間需要是1:1的映射關(guān)系,以免引起B(yǎng)UG9761210。
5.從11gr2起,私網(wǎng)網(wǎng)段配置需要支持組播功能,因?yàn)樗骄W(wǎng)需要通過組播模式實(shí)現(xiàn)通訊。
3.7 send (tx) / receive (rx)
UDP包傳輸?shù)倪^程中,接受進(jìn)程會(huì)讀取數(shù)據(jù)包頭的校驗(yàn)值。任何校驗(yàn)值損壞都會(huì)使這個(gè)包被丟棄,并導(dǎo)致重發(fā),這會(huì)增加CPU的使用率并且延緩數(shù)據(jù)包處理。
由于網(wǎng)卡上開啟了Checksum offloading 導(dǎo)致了checksum 錯(cuò)誤,如果出現(xiàn)這樣的問題請(qǐng)檢查checksum offloading的功能是否被禁用,測(cè)試后考慮關(guān)閉網(wǎng)卡上的該項(xiàng)功能。在Linux系統(tǒng)上執(zhí)行ethtool -K <IF> rx off tx off可以關(guān)閉該功能。
3.8 MTU
不匹配的MTU大小設(shè)置會(huì)導(dǎo)致傳輸過程中出現(xiàn) "packet too big" 錯(cuò)誤并丟失數(shù)據(jù)包,導(dǎo)致global cache block丟失和大量的重傳(retransmission)申請(qǐng)。而且私網(wǎng)中不一致的MTU值會(huì)導(dǎo)致節(jié)點(diǎn)無法加入集群的問題。
對(duì)于以太網(wǎng)(Ethernet),大多數(shù)UNIX平臺(tái)的默認(rèn)值是1500字節(jié)。私網(wǎng)鏈路中所有設(shè)備都應(yīng)該定義相同的MTU。請(qǐng)確認(rèn)并監(jiān)控私網(wǎng)鏈路中的所有的設(shè)備。為ping ,tracepath,traceroute命令指定大的,非默認(rèn)尺寸,ICMP probe 包來檢查MTU設(shè)置是否存在不一致。使用ifconfig或者廠商推薦的工具為服務(wù)器網(wǎng)卡(NIC)的MTU設(shè)置合適的值。
Jumbo Frames 并不是IEEE 標(biāo)準(zhǔn)配置。單個(gè)Jumb Frame的大小是9000 bytes左右。Frame 的大小取決于網(wǎng)絡(luò)設(shè)備供應(yīng)商,在不同的通信設(shè)備上的大小可能是不一致的。如果默認(rèn)的MTU 尺寸不是9000bytes,請(qǐng)保證通信路徑中的所有設(shè)備(例如:交換機(jī)/網(wǎng)絡(luò)設(shè)備/網(wǎng)卡)都能夠支持一個(gè)統(tǒng)一的MTU值,在操作的過程中必須把Frame Size(MTU Size)配置成這個(gè)值。不合適的MTU設(shè)置,例如:交換機(jī)上配置MTU=1500,但是服務(wù)器上的私網(wǎng)網(wǎng)卡配置成MTU=9000,這樣會(huì)造成丟包,包的碎片和重組的錯(cuò)誤,這些都會(huì)導(dǎo)致嚴(yán)重的性能問題和節(jié)點(diǎn)異常宕機(jī)。大部分的平臺(tái)上我們都可以通過netstat –s命令的‘IP stats’輸出發(fā)現(xiàn)包的碎片和重組的錯(cuò)誤。大部分的平臺(tái)上我們可以通過ifconfig –a命令找到frame size的設(shè)置。關(guān)于交換機(jī)上的配置查詢,需要查看交換機(jī)提供商的文檔來確定。
4.操作系統(tǒng)層的關(guān)鍵優(yōu)化項(xiàng)
4.1 兼容性檢查
在Oracle建設(shè)實(shí)施之前,根據(jù)操作系統(tǒng)平臺(tái)對(duì)即將采用的相關(guān)數(shù)據(jù)庫技術(shù)進(jìn)行兼容性檢查。下面的link是官方的Matrix,分別針對(duì)Linux平臺(tái)和Unix平臺(tái):
http://www.oracle.com/technetwork/database/clustering/tech-generic-linux-new-086754.html
http://www.oracle.com/technetwork/database/clustering/tech-generic-unix-new-166583.html
4.2 平臺(tái)版本及補(bǔ)丁
當(dāng)我們選擇了具體的操作系統(tǒng)平臺(tái)以及具體的數(shù)據(jù)庫版本之后,接下需要做的事情就是要根據(jù)官方提供的文檔來檢查我們的系統(tǒng)補(bǔ)丁以及相關(guān)軟件包是否齊全準(zhǔn)確:
https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=184026698780346&parent=DOCUMENT&sourceId=1526555.1&id=169706.1&_afrWindowMode=0&_adf.ctrl-state=bjsizj5t_240
https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=184190072886338&parent=DOCUMENT&sourceId=1526555.1&id=1393041.1&_afrWindowMode=0&_adf.ctrl-state=bjsizj5t_338
https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=184287678146090&parent=DOCUMENT&sourceId=1526555.1&id=282036.1&_afrWindowMode=0&_adf.ctrl-state=bjsizj5t_436
Oracle官方對(duì)所有數(shù)據(jù)庫集群及RDBMS等建議的最新補(bǔ)丁列表:
https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=202212137729856&parent=DOCUMENT&sourceId=1526083.1&id=756671.1&_afrWindowMode=0&_adf.ctrl-state=yi6z8ecqc_839#r11204
另外在AIX平臺(tái)上有一個(gè)不容忽視的地方,那就是必須保障Hacmp沒有安裝或者沒有任何殘留痕跡。
4.3 時(shí)間同步設(shè)置項(xiàng)
NTP是11gr2之前必須的選項(xiàng),用來同步節(jié)點(diǎn)之間的時(shí)間。而到了11gr2之后,不僅僅可以采用NTP也可以采用CTSSD(Cluster Time Synchronization Daemon)代替NTP。如果NTP啟用的話,Oracle會(huì)采用NTP,CTSSD自動(dòng)處于觀察模式。但是在NTP的啟用模式上,我們需要采用漸進(jìn)式模式(需要利用啟動(dòng)參數(shù)-x)。可以參照下面的配置:
1. /etc/sysconfig/ntpd
# Drop root to id 'ntp:ntp' by default.
OPTIONS="-x -u ntp:ntp -p /var/run/ntpd.pid"
# Set to 'yes' to sync hw clock after successful ntpdate
SYNC_HWCLOCK=no
# Additional options for ntpdate
NTPDATE_OPTIONS=""
4.4 ASLR (Address Space Layout Randomization)
ASLR是REL5 Linux以上版本中默認(rèn)開啟的一個(gè)特性,是參與保護(hù)緩沖區(qū)溢出問題的一個(gè)計(jì)算機(jī)安全技術(shù)。是為了防止攻擊者在內(nèi)存中能夠可靠地對(duì)跳轉(zhuǎn)到特定利用函數(shù)。ASLR包括隨機(jī)排列程序的關(guān)鍵數(shù)據(jù)區(qū)域的位置,包括可執(zhí)行的部分、堆、棧及共享庫的位置。ASLR通過制造更多讓攻擊者預(yù)測(cè)目標(biāo)地址的困難以阻礙一些類型的安裝攻擊。而在ORACLE的進(jìn)程管理當(dāng)中,多個(gè)進(jìn)程共享相同地址的共享內(nèi)存,開啟ASLR特性之后,Oracle就無法保障共享內(nèi)存可用。從而導(dǎo)致ORA-00445錯(cuò)誤發(fā)生。要在Linux上關(guān)閉這個(gè)特性需要添加或修改以下兩個(gè)參數(shù)到/etc/sysctl.conf文件:
kernel.randomize_va_space=0
kernel.exec-shield=0
4.5 HugePage
大多數(shù)操作系統(tǒng)采用了分段或分頁的方式進(jìn)行管理。分段是粗粒度的管理方式,而分頁則是細(xì)粒度管理方式,分頁方式可以避免內(nèi)存空間的浪費(fèi)。相應(yīng)地,也就存在內(nèi)存的物理地址與虛擬地址的概念。通過前面這兩種方式,CPU必須把虛擬地址轉(zhuǎn)換程物理內(nèi)存地址才能真正訪問內(nèi)存。為了提高這個(gè)轉(zhuǎn)換效率,CPU會(huì)緩存最近的虛擬內(nèi)存地址和物理內(nèi)存地址的映射關(guān)系,并保存在一個(gè)由CPU維護(hù)的映射表中。為了盡量提高內(nèi)存的訪問速度,需要在映射表中保存盡量多的映射關(guān)系。
Linux的內(nèi)存管理采取的是分頁存取機(jī)制,為了保證物理內(nèi)存能得到充分的利用,內(nèi)核會(huì)按照LRU算法在適當(dāng)?shù)臅r(shí)候?qū)⑽锢韮?nèi)存中不經(jīng)常使用的內(nèi)存頁自動(dòng)交換到虛擬內(nèi)存中,而將經(jīng)常使用的信息保留到物理內(nèi)存。
通常情況下,Linux默認(rèn)情況下每頁是4K,這就意味著如果物理內(nèi)存很大,則映射表的條目將會(huì)非常多,會(huì)影響CPU的檢索效率。因?yàn)閮?nèi)存大小是固定的,為了減少映射表的條目,可采取的辦法只有增加頁的尺寸。因此Hugepage便因此而來。也就是打破傳統(tǒng)的小頁面的內(nèi)存管理方式,使用大頁面2m,4m等。如此一來映射條目則明顯減少。如果系統(tǒng)有大量的物理內(nèi)存(大于8G),則物理32位的操作系統(tǒng)還是64位的,都應(yīng)該使用Hugepage。
那么如何控制Oracle數(shù)據(jù)庫對(duì)HugePage的利用呢?主要分為以下幾個(gè)步驟:
1.需要在/etc/security/limits.conf 中設(shè)置memlock值(單位KB),該值小于內(nèi)存大小。
2. 如果你使用11G及以后的版本,AMM已經(jīng)默認(rèn)開啟,但是AMM與Hugepages是不兼容的,必須先關(guān)閉AMM。
3.編輯/etc/sysctl.conf 設(shè)置 vm.nr_hugepages參數(shù)的具體值。
4.停止實(shí)例并重啟OS系統(tǒng),并通過以下命令檢查設(shè)置是否生效:
# grep HugePages /proc/meminfo
HugePages_Total: 1496
HugePages_Free: 485
HugePages_Rsvd: 446
HugePages_Surp: 0
5.通過以下參數(shù)控制數(shù)據(jù)庫對(duì)HugePage的使用方式(11gr2之后):
use_large_pages = {true/only/false/auto}
默認(rèn)值是true,如果系統(tǒng)設(shè)置Hugepages的話,SGA會(huì)優(yōu)先使用hugepages,有多少用多少。如果設(shè)置為false, SGA就不會(huì)使用hugepages。如果設(shè)置為only 如果hugepages大小不夠的話,數(shù)據(jù)庫實(shí)例是無法啟動(dòng)的。設(shè)置為auto,這個(gè)選項(xiàng)會(huì)觸發(fā)oradism進(jìn)程重新配置linux內(nèi)核,以增加hugepages的數(shù)量。一般設(shè)置為true。
SQL> alter system set use_large_pages=true scope=spfile sid='*';
4.6 Transparent HugePage
透明大頁管理和前面所述的標(biāo)準(zhǔn)大頁管理都是操作系統(tǒng)為了減少頁表轉(zhuǎn)換消耗的資源而發(fā)布的新特性,雖然Oracle建議利用大頁機(jī)制來提高數(shù)據(jù)庫的性能,但是Oracle卻同時(shí)建議關(guān)閉透明大頁管理。這二者的區(qū)別在于大頁的分配機(jī)制,標(biāo)準(zhǔn)大頁管理是預(yù)分配的方式,而透明大頁管理則是動(dòng)態(tài)分配的方式。
對(duì)于數(shù)據(jù)庫來講這種動(dòng)態(tài)的分配方式在系統(tǒng)負(fù)載很高的情況下非常有可能導(dǎo)致數(shù)據(jù)庫出現(xiàn)嚴(yán)重的性能問題。這在Oracle官方文檔1557478.1當(dāng)中有詳細(xì)的記載。
那么如何來關(guān)閉系統(tǒng)的透明大頁管理呢?只要修改如下參數(shù)即可:
# echo never > /sys/kernel/mm/transparent_hugepage/enabled
4.7 vm.min_free_kbytes
該參數(shù)是Linux內(nèi)核當(dāng)中用來控制保留最小空閑內(nèi)存的數(shù)量,Oracle建議調(diào)大該值為512M。這樣的設(shè)置有利于相對(duì)加快內(nèi)存的回收速度,從而降低內(nèi)存吃緊的壓力。
4.8 AIX虛擬內(nèi)存參數(shù)
這一項(xiàng)主要是針對(duì)AIX的內(nèi)存管理。AIX內(nèi)存管理和Linux的內(nèi)存管理機(jī)制不一樣,它采用計(jì)算內(nèi)存和非計(jì)算內(nèi)存方式來管理內(nèi)存。IBM對(duì)Oracle的建議值為以下方案:
minperm%=3
maxperm%=90
maxclient%=90
lru_file_repage=0
lru_poll_interval=10
strict_maxperm=0
strict_maxclient=1
page_steal_method=1
minperm和maxperm控制非計(jì)算內(nèi)存中的文件頁的下限和上限;maxclient控制非計(jì)算內(nèi)存中的客戶頁面;lru_file_repage表示分頁替換守護(hù)進(jìn)程將根據(jù)其內(nèi)部重新分頁表來確定選擇何種類型的分頁進(jìn)行操作。strict_maxperm&strict_maxclient表示無論是否有空閑內(nèi)存,都會(huì)嚴(yán)格限制文件頁以及客戶頁的最大占有比率不得超越限制。page_steal_method表示換頁時(shí)的策略,0為全部頁面,1為非計(jì)算持久頁面。以上參數(shù)放方案表示費(fèi)計(jì)算持久頁面的上限為90%,下限為3%;客戶機(jī)頁面上限為90%;采用非嚴(yán)格持久頁面上限控制策略;嚴(yán)格客戶機(jī)頁面上限控制策略。lru_file_repage & page_steal_method配合使用表示LRUD在尋找空閑頁時(shí),只尋找費(fèi)計(jì)算內(nèi)存當(dāng)中的持久內(nèi)存頁面。
vmm_klock_mode=2
這個(gè)參數(shù)是是否對(duì)內(nèi)核頁進(jìn)行加鎖的控制。0則表示不進(jìn)行加鎖,那么內(nèi)核頁有可能被錯(cuò)誤換出從而導(dǎo)致Page Fault發(fā)生;1則表示部分內(nèi)核頁面加鎖;2則表示對(duì)所有內(nèi)核頁面進(jìn)行加鎖。在Oracle RAC環(huán)境下或者EMC的存儲(chǔ)作為系統(tǒng)的Swap Device的時(shí)候,IBM強(qiáng)烈建議將該參數(shù)設(shè)置為2。
4.9 PowerVM環(huán)境下的參數(shù)調(diào)整
PowerVM環(huán)境下,由于其利用Hypervisor實(shí)現(xiàn)了很多虛擬化的功能,這些功能大多從靈活性及擴(kuò)展型來考慮,但是如果我們運(yùn)行的是Oracle Rac的話,那么還是有很多關(guān)鍵點(diǎn)需要注意。
1. cpu folding
虛擬處理器折疊功能,當(dāng)系統(tǒng)負(fù)載比較低的時(shí)候,AIX系統(tǒng)自動(dòng)休眠一些虛擬處理器,以減少Hypervisor的開銷,提升PowerVM平臺(tái)整體性能。但是在某些情況下,當(dāng)數(shù)據(jù)庫的負(fù)載變化非常快的時(shí)候,CPU折疊或者打開的速度反而會(huì)影響數(shù)據(jù)庫甚至系統(tǒng)的性能,嚴(yán)重導(dǎo)致系統(tǒng)掛起。下面是IBM針對(duì)該BUG的一個(gè)補(bǔ)丁,主要針對(duì)AIX5.3 & 6.1。
https://www-01.ibm.com/support/docview.wss?uid=isg1fixinfo105201
4.10 Linux內(nèi)核參數(shù)
以下是Oracle官方針對(duì)Linux平臺(tái)內(nèi)核參數(shù)設(shè)置的一個(gè)通用方案:
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 4294967295
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 4194304
net.core.wmem_max = 4194304
kernel.shmmax: 是核心參數(shù)中最重要的參數(shù)之一,用于定義單個(gè)共享內(nèi)存段的最大值。設(shè)置應(yīng)該足夠大,能在一個(gè)共享內(nèi)存段下容納下整個(gè)的SGA ,設(shè)置的過低可能會(huì)導(dǎo)致需要?jiǎng)?chuàng)建多個(gè)共享內(nèi)存段,這樣可能導(dǎo)致系統(tǒng)性能的下降。
至于導(dǎo)致系統(tǒng)下降的主要原因?yàn)樵趯?shí)例啟動(dòng)以及ServerProcess創(chuàng)建的時(shí)候,多個(gè)小的共享內(nèi)存段可能會(huì)導(dǎo)致當(dāng)時(shí)輕微的系統(tǒng)性能的降低(在啟動(dòng)的時(shí)候需要去創(chuàng)建多個(gè)虛擬地址段,在進(jìn)程創(chuàng)建的時(shí)候要讓進(jìn)程對(duì)多個(gè)段進(jìn)行“識(shí)別”,會(huì)有一些影響),但是其他時(shí)候都不會(huì)有影響。
64位linux系統(tǒng):可取的最大值為物理內(nèi)存值-1byte,建議值為多于物理內(nèi)存的一半,一般取值大于SGA_MAX_SIZE即可,可以取物理內(nèi)存-1byte。例如,如果為12G物理內(nèi)存,可取210241024*1024-1=12884901887,SGA肯定會(huì)包含在單個(gè)共享內(nèi)存段中。
kernel.shmall: 該參數(shù)控制可以使用的共享內(nèi)存的總頁數(shù)。Linux共享內(nèi)存頁大小為4KB,共享內(nèi)存段的大小都是共享內(nèi)存頁大小的整數(shù)倍。一個(gè)共享內(nèi)存段的最大大小是16G,那么需要共享內(nèi)存頁數(shù)是16GB/4KB=16777216KB /4KB=4194304(頁),也就是64Bit系統(tǒng)下16GB物理內(nèi)存,設(shè)置kernel.shmall = 4194304才符合要求(幾乎是原來設(shè)置2097152的兩倍)。這時(shí)可以將shmmax參數(shù)調(diào)整到16G了,同時(shí)可以修改SGA_MAX_SIZE和SGA_TARGET為12G(您想設(shè)置的SGA最大大小,當(dāng)然也可以是2G~14G等,還要協(xié)調(diào)PGA參數(shù)及OS等其他內(nèi)存使用,不能設(shè)置太滿,比如16G)。
kernel.shmmni: 該參數(shù)是共享內(nèi)存段的最大數(shù)量。shmmni缺省值4096,一般肯定是夠用了。
fs.file-max: 該參數(shù)決定了系統(tǒng)中所允許的文件句柄最大數(shù)目,文件句柄設(shè)置代表linux系統(tǒng)中可以打開的文件的數(shù)量。
fs.aio-max-nr: 此參數(shù)限制并發(fā)未完成的請(qǐng)求,應(yīng)該設(shè)置避免I/O子系統(tǒng)故障。
kernel.sem: 以kernel.sem = 250 32000 100 128為例:250是參數(shù)semmsl的值,表示一個(gè)信號(hào)量集合中能夠包含的信號(hào)量最大數(shù)目。32000是參數(shù)semmns的值,表示系統(tǒng)內(nèi)可允許的信號(hào)量最大數(shù)目。100是參數(shù)semopm的值,表示單個(gè)semopm()調(diào)用在一個(gè)信號(hào)量集合上可以執(zhí)行的操作數(shù)量。128是參數(shù)semmni的值,表示系統(tǒng)信號(hào)量集合總數(shù)。
net.ipv4.ip_local_port_range: 表示應(yīng)用程序可使用的IPv4端口范圍。
net.core.rmem_default: 表示套接字接收緩沖區(qū)大小的缺省值。
net.core.rmem_max: 表示套接字接收緩沖區(qū)大小的最大值。
net.core.wmem_default: 表示套接字發(fā)送緩沖區(qū)大小的缺省值。
net.core.wmem_max: 表示套接字發(fā)送緩沖區(qū)大小的最大值。
5.配置集群層的關(guān)鍵點(diǎn)
5.1 diagwait
在集群進(jìn)行驅(qū)逐節(jié)點(diǎn)時(shí),節(jié)點(diǎn)發(fā)生重新啟動(dòng)的場(chǎng)合下,操作系統(tǒng)需要轉(zhuǎn)儲(chǔ)CrashDump,這個(gè)參數(shù)就是集群需要等待操作系統(tǒng)轉(zhuǎn)儲(chǔ)的時(shí)間參數(shù)。對(duì)于版本 10gR2 和 11gR1,所有平臺(tái)上的最佳實(shí)踐都是將 CSS diagwait 參數(shù)設(shè)置為小于等于13。對(duì)于11gR2已經(jīng)不要求對(duì)該參數(shù)進(jìn)行設(shè)置。
5.2 ORA_CRS_HOME
對(duì)于這個(gè)變量,Oracle官方給出的建議是:不要設(shè)置 ORA_CRS_HOME 環(huán)境變量(在所有平臺(tái)上)。設(shè)置此變量將使各個(gè) Oracle 組件出現(xiàn)問題,而且 CRS 程序完全不需要此變量,因?yàn)樗鼈兌加邪b腳本。
5.3 關(guān)于組播和多播
Oracle11gR2私網(wǎng)采用的是組播方式通訊,組播地址段為230.0.1.0 或 224.0.0.251網(wǎng)段,為了保障集群私網(wǎng)通訊的正常及穩(wěn)定,一方面這個(gè)網(wǎng)段的網(wǎng)絡(luò)配置需要支持組播,另外一方面不要讓主機(jī)的任何其他網(wǎng)絡(luò)配置和這兩個(gè)網(wǎng)段沖突。曾經(jīng)遇到過浪潮的X86服務(wù)器的帶外管理的某個(gè)地址也正好利用了這個(gè)網(wǎng)段,結(jié)果導(dǎo)致了Oracle Rac節(jié)點(diǎn)的異常重啟。這種問題一般會(huì)顯示為私網(wǎng)通訊報(bào)錯(cuò),但是正常狀況下只要帶外管理收集日志工具不啟動(dòng)的話,那么是不會(huì)發(fā)現(xiàn)這個(gè)問題的,屬于偶發(fā)性問題。所以我們需要特別小心此類問題,不要等到發(fā)生時(shí)候再去花費(fèi)大量實(shí)踐調(diào)查。
6.安裝集群時(shí)的關(guān)鍵點(diǎn)
6.1 cluvfy
如果安裝過10g以后的RAC環(huán)境,應(yīng)該對(duì)這個(gè)工具并不陌生。在安裝Cluster和Database之前通常會(huì)執(zhí)行runcluvfy.sh腳本來檢查當(dāng)前系統(tǒng)是否滿足安裝條件。runcluvfy.sh將cluvfy工具的功能在shell中實(shí)現(xiàn),使得用戶在數(shù)據(jù)庫和CLUSTER安裝之前就可以利用這個(gè)工具的功能。這個(gè)工具的主要作用就是驗(yàn)證系統(tǒng)是否滿足安裝的條件,尤其是檢查網(wǎng)絡(luò)和域名解析,如果網(wǎng)絡(luò)和域名解析在安裝之前沒有正常的配置,通常直接導(dǎo)致安裝的失敗。主要用法如下所列兩個(gè)功能:
# runcluvfy.sh stage -list
# runcluvfy.sh comp -list
6.2 升級(jí)順序問題
安裝完集群軟件也好,RDBMS也好,打補(bǔ)丁是必然要做的事情。但是究竟是等安裝完所有的組件之后再統(tǒng)一打補(bǔ)丁呢還是說將每一個(gè)組件都按照安裝&補(bǔ)丁升級(jí)的順序依次做完呢?Oracle給的建議是:在執(zhí)行 11gR2 之前的安裝時(shí),建議在執(zhí)行任何 RDBMS 或 ASM 主目錄安裝前應(yīng)用補(bǔ)丁程序?qū)?Clusterware 主目錄升級(jí)到所需的級(jí)別。
6.3 root.sh & rootupgrade.sh
安裝或者升級(jí)期間,最后的步驟就是要執(zhí)行以上的腳本。當(dāng)然按照安裝文檔的要求必須是用超級(jí)用戶root來執(zhí)行。但是可能有些人認(rèn)為只要利用root的權(quán)限去執(zhí)行就可以了,很想當(dāng)然的用了su root -c或者是sudo等去執(zhí)行,結(jié)果導(dǎo)致執(zhí)行失敗,日志報(bào)錯(cuò)crsd.bin crashes。因?yàn)槟_本的執(zhí)行不僅僅是要用超級(jí)用戶root的權(quán)限,還要利用root用戶的環(huán)境配置等。
6.4 /etc/init.cssd
11.2 之前再AIX系統(tǒng)上,OPROCD 默認(rèn)不在 AIX 全局運(yùn)行隊(duì)列運(yùn)行 ,這可能會(huì)導(dǎo)致 OPROCD 錯(cuò)誤地重啟節(jié)點(diǎn)。(Bug 13623902)。此問題的更正操作是修改 /etc/init.cssd 文件,加入如下參數(shù):
RT_GRQ=ON
export RT_GRQ
但是AIX6.1 TL4以上的版本就自帶了對(duì)該問題的修正程序。所以當(dāng)我們采用低版本的AIX操作系統(tǒng)時(shí),需要特別注意這個(gè)配置文 件。
7.數(shù)據(jù)庫層的關(guān)鍵優(yōu)化項(xiàng)
7.1 pre_page_sga & lock_sga
這兩個(gè)參數(shù)都是對(duì)數(shù)據(jù)庫SGA的保護(hù)參數(shù)。lock_sga是控制SGA不被換出到交換空間上,會(huì)保障數(shù)據(jù)庫內(nèi)存頁一致留在物理內(nèi)存上,從而提高性能。而pre_page_sga是保障數(shù)據(jù)庫實(shí)例啟動(dòng)時(shí)就把所有SGA讀到物理內(nèi)存上,雖然啟動(dòng)會(huì)慢,但是后續(xù)性能會(huì)好。
但是pre_page_sga同時(shí)還有一個(gè)作用。pre_page_sga 為true時(shí), 每個(gè)進(jìn)程創(chuàng)建的時(shí)候都會(huì)去touch一遍sga里的page, 當(dāng)sga越大的時(shí)候,這個(gè)touch所消耗的時(shí)間就越長,特別是在斷開式連接,短連接的Application上, 將會(huì)消耗很多資源。當(dāng)客戶端連接感覺到慢的時(shí)候,這個(gè)參數(shù)就一定要設(shè)置成false了。Oracle的建議也是false。
SQL> alter system set pre_page_sga=false scope=spfile sid='';
SQL> alter system set lock_sag=true scope=spfile sid='';
7.2 關(guān)于重做日志
首先、接觸過數(shù)據(jù)庫的人相信對(duì)這個(gè)概念都不陌生。數(shù)據(jù)庫在做SQL更新的時(shí)候,首先要將事務(wù)執(zhí)行過程記入重做日志當(dāng)中,然后才會(huì)把日志刷入磁盤,將數(shù)據(jù)更新持久化。一條數(shù)據(jù)提交之后成功的標(biāo)準(zhǔn)時(shí)日志落到磁盤,而不是真正的數(shù)據(jù)落盤。因此日志的配置(大小、數(shù)量)直接決定著數(shù)據(jù)庫讀寫的性能,如果日志大小非常大,那么會(huì)造成歸檔切換時(shí)間非常長,一旦這時(shí)候發(fā)生了不可恢復(fù)的DB災(zāi)難,那么通過備份恢復(fù)的數(shù)據(jù)流失量或者說RPO就會(huì)較大。日志大小非常小的話,勢(shì)必會(huì)造成日志頻繁切換,AWR里面有大量的日志切換事件,這樣對(duì)數(shù)據(jù)庫的性能會(huì)有較大影響。因此根據(jù)性能測(cè)試的AWR報(bào)告中日志切換的等待事件、和切換頻度來決定其數(shù)據(jù)量和大小是否需要調(diào)整。一般的OLTP建議(10組、500M)。
接著、我們還需要考慮與其相關(guān)的參數(shù)設(shè)置。
1. _use_adaptive_log_file_sync
它直接決定了日志落盤的方式,對(duì)于日志緩沖區(qū)的數(shù)據(jù)落盤的方式,11g增加一種新的方式就是polling的方式,傳統(tǒng)方式是post/wait方式。oracle底層自動(dòng)判斷何時(shí)用何種方法來完成lgwr進(jìn)程的寫任務(wù)。對(duì)于post/wait方式來講,客戶端做了commit之后,需要等待事件完成。oracle一旦完成會(huì)通知用戶進(jìn)程,用戶進(jìn)程立刻感知。但是這一通知post,會(huì)耗費(fèi)大量CPU資源。polling是oracle前臺(tái)進(jìn)程啟動(dòng)檢查任務(wù),自動(dòng)檢查后臺(tái)lgwr寫入情況,耗費(fèi)CPU資源比較少,但是用戶進(jìn)程并不一定能立刻感知。
所以兩種方法各有千秋。但是關(guān)鍵是后臺(tái)實(shí)現(xiàn)兩種方法切換的時(shí)候要耗費(fèi)系統(tǒng)性能,尤其在繁忙的時(shí)候頻繁切換的話反而會(huì)導(dǎo)致數(shù)據(jù)庫性能下降。awr出現(xiàn)大量log file sync,Bug 13707904。
SQL> alter system set "_use_adaptive_log_file_sync"=false scope=spfile sid='*';
2. archive_lag_target 它決定了我們是否開啟日志強(qiáng)制切換功能,為了減少故障時(shí)數(shù)據(jù)損失,可以設(shè)置archive_lag_target參數(shù),強(qiáng)制進(jìn)行日志切換。這個(gè)參數(shù)的缺省值是0,即為不啟用該參數(shù)。建議設(shè)置值為1800。 SQL> alter system set archive_lag_target=1800 scope=spfile sid='*';
7.3 AMM
首先、ORACLE通用的兩種內(nèi)存管理方式AMM&ASMM,從Oracle 11g開始,ORACLE默認(rèn)使用AMM(自動(dòng)內(nèi)存管理),即讓數(shù)據(jù)庫完全管理SGA、PGA的大小,而對(duì)于管理員只需要設(shè)置一個(gè)總的大小(memory_target),數(shù)據(jù)庫會(huì)動(dòng)態(tài)的調(diào)整SGA、PGA的大小以及其中包含的各個(gè)組件大小,如Database buffer cache、Shared pool等。這個(gè)特性設(shè)計(jì)的初衷是好的,它希望避免不正確的SGA和PGA設(shè)置導(dǎo)致的內(nèi)存使用不平衡的性能問題。
但是在實(shí)際應(yīng)用過程中,這個(gè)特性是不是一定非常出色呢?AMM中在數(shù)據(jù)庫啟動(dòng)是會(huì)有一個(gè)固定比例來分配SGA/PGA 大小:
sga_target =memory_target 60%
pga_aggregate_target=memory_target *40%。
但是在并發(fā)較高,數(shù)據(jù)庫非常繁忙的場(chǎng)合下,自動(dòng)內(nèi)存調(diào)整的速度很可能趕不上大量會(huì)話對(duì)內(nèi)存的請(qǐng)求的速度。另外當(dāng)PGA隨著會(huì)話不斷增加而需求量猛增的情況下,它會(huì)首先搶占SGA,導(dǎo)致數(shù)據(jù)庫性能故障。在高并發(fā)的數(shù)據(jù)庫場(chǎng)景中并不建議使用AMM。采用10g更為成熟的自動(dòng)共享內(nèi)存管理(ASMM)和自動(dòng)PGA管理。手動(dòng)調(diào)整內(nèi)存參數(shù),具體可以參照以下:
1. 關(guān)閉內(nèi)存自動(dòng)管理
SQL> alter system set memory_target=0 scope=spfile sid='';
SQL> alter system set memory_max_target=0 scope=spfile sid='*';
2. 設(shè)置SGA為固定值,可以根據(jù)性能測(cè)試中的AWR報(bào)告中的建議
SQL> alter system set sga_max_size=XG scope=spfile sid='';
SQL> alter system set sga_target=XG scope=spfile sid='';
3. 設(shè)置PGA等參數(shù)
SQL> alter system set pga_aggregate_target=XG scope=spfile sid='';
SQL> alter system set large_pool_size=256M scope=spfile sid='';
pga_aggregate_target=XG
large_pool_size=256M
另外很重要的一個(gè)參數(shù),“_shared_pool_reserved_pct”,如果這個(gè)參數(shù)設(shè)置小了,很可能導(dǎo)致ORA04031,所以需要一個(gè)合理的設(shè)置。
SQL> alter system set“_shared_pool_reserved_pct”=10 scope=spfile sid='*';
7.4 SQL解析
1. 綁定變量窺測(cè)
在Oracle中每條SQL語在執(zhí)行之前都需要經(jīng)過解析,這里面又分為軟解析和硬解析。在Oracle中存在兩種類型的SQL語句,一類為 DDL語句(數(shù)據(jù)定義語言),他們是從來不會(huì)共享使用的,也就是每次執(zhí)行都需要進(jìn)行硬解析。還有一類就是DML語句(數(shù)據(jù)操縱語言),他們會(huì)根據(jù)情況選擇要么進(jìn)行硬解析,要么進(jìn)行軟解析。一般我們希望我們的AWR報(bào)告中硬解析偏少,而軟解析偏多。因?yàn)橛步馕龅拇鷥r(jià)會(huì)非常高。為了減少帶綁定變量的sql的解析時(shí)間,oracle 9i引入的綁定變量窺測(cè)的功能。也就是在同一個(gè)SQL的變量被賦于不同值時(shí)采用同一個(gè)游標(biāo),這樣雖然節(jié)省了sql的解析時(shí)間。大家有沒有通過功能的打開或者關(guān)閉實(shí)際觀察過AWR中的軟硬解析數(shù)目的實(shí)際狀況呢?其實(shí)對(duì)于綁定變量窺測(cè)這個(gè)特性以及后來的自適應(yīng)游標(biāo)等特性,都是oracle為了找到最優(yōu)執(zhí)行計(jì)劃而啟用的一些新特性,但是在實(shí)際應(yīng)用過程中,對(duì)于不同量級(jí)不同特性的業(yè)務(wù)場(chǎng)景也曾經(jīng)因此出現(xiàn)了很多bug( Bug 20370037,Bug 13456573,Bug 20082921)等。
根據(jù)自己的業(yè)務(wù)系統(tǒng)特點(diǎn),做大量的性能測(cè)試和業(yè)務(wù)測(cè)試,根據(jù)參數(shù)的關(guān)閉打開對(duì)比awr報(bào)告當(dāng)中顯示出的軟硬解析比率以及執(zhí)行計(jì)劃數(shù)據(jù)決定是否打開或者關(guān)系相應(yīng)功能特性。如下參數(shù):
"_optim_peek_user_binds"
"_optimizer_adaptive_cursor_sharing"
"_optimizer_extended_cursor_sharing"
"_optimizer_extended_cursor_sharing_rel"
"_optimizer_use_feedback"
2. open_cursors & session_cached_cursors
與之相關(guān)的幾個(gè)參數(shù):open_cursors、session_cached_cursors 這兩個(gè)參數(shù)決定著應(yīng)用會(huì)話可以控制打開以及緩存的游標(biāo)數(shù)量,如果數(shù)量不足,就會(huì)引起SQL解析的性能問題。這兩個(gè)參數(shù)要根據(jù)v$resource_limit視圖中的值的情況進(jìn)行調(diào)整,避免資源設(shè)置不合理導(dǎo)致的性能問題。
SQL> alter system set open_cusors=N scope=spfile sid='';
SQL> alter system set session_cached_cursors=M scope=spfile sid='';
3. _b_tree_bitmap_plans
與執(zhí)行解析執(zhí)行計(jì)劃相關(guān)的幾個(gè)參數(shù),_b_tree_bitmap_plans、有時(shí)將B-Tree索引進(jìn)行BITMAP轉(zhuǎn)換來進(jìn)行SQL執(zhí)行,往往會(huì)生成極其惡劣的執(zhí)行計(jì)劃,導(dǎo)致CPU100%。Select Fails With ORA-600 [20022] (文檔 ID 1202646.1) 建議可以關(guān)掉。
SQL> alter system set "_b_tree_bitmap_plans"=false scope=spfile sid='*';
7.5 process & sessions
process 限制了能夠連接到SGA的操作系統(tǒng)進(jìn)程數(shù),這個(gè)總數(shù)必須足夠大,從而能夠適用于后臺(tái)進(jìn)程與所有的專用服務(wù)器進(jìn)程,此外共享服務(wù)器進(jìn)程與調(diào)度進(jìn)程的數(shù)目也被計(jì)算在內(nèi)。session 是通信雙方從開始通信到通信結(jié)束期間的一個(gè)上下文(context)。這個(gè)上下文是一段位于服務(wù)器端的內(nèi)存:記錄了本次連接的客戶端機(jī)器、通過哪個(gè)應(yīng)用程序、哪個(gè)用戶在登錄等信息。
Oracle的連接數(shù)sessions與其參數(shù)文件中的進(jìn)程數(shù)process相關(guān),它們的關(guān)系如下: sessions=(1.1process+5)
這兩個(gè)參數(shù)的設(shè)置是需要根據(jù)應(yīng)用的具體并發(fā)需求來決定具體的設(shè)置方案。
SQL> alter system set process=N scope=spfile sid='';
SQL> alter system set sessions=1.1N+5 scope=spfile sid='';
7.6 DRM
數(shù)據(jù)庫節(jié)點(diǎn)之間的競爭有很多,包括鎖(各種粒度鎖)的競爭以及數(shù)據(jù)的傳輸?shù)取M耆苊飧偁幠蔷褪チ薘AC的意義了,RAC本身就是希望能在兩個(gè)節(jié)點(diǎn)并行執(zhí)行任務(wù)。如果特別極致的并行一定引起嚴(yán)重的性能問題,如果完全禁止,既無法做到又失去了集群本來的意義。所以我們只能在一定程度上去平衡:
首先、關(guān)于DRM,oracle的DRM特性從理論上來看,它是為了避免節(jié)點(diǎn)間的數(shù)據(jù)量傳輸,避免節(jié)點(diǎn)間的鎖等待事件頻繁發(fā)生。DRM的極致是做到請(qǐng)求節(jié)點(diǎn)和Master節(jié)點(diǎn)統(tǒng)一化。但是實(shí)踐中,這個(gè)特性引起了很多的BUG、反而導(dǎo)致了節(jié)點(diǎn)間的競爭出現(xiàn)了性能故障。Bug 6018125 - Instance crash during dynamic remastering or instance reconfiguration (Doc ID 6018125.8)。所以建議關(guān)閉。
SQL> alter system set "_gc_policy_time"=0 scope=spfile sid='*';
SQL> alter system set "_gc_undo_affinity"=false scope=spfile sid='*';
7.7 parallel_force_local
關(guān)于參數(shù)“parallel_force_local”,ORACLE RAC為了實(shí)現(xiàn)多節(jié)點(diǎn)并行處理是花費(fèi)了很大代價(jià)的,假設(shè)一個(gè)集群當(dāng)中有三個(gè)節(jié)點(diǎn),對(duì)于某一個(gè)數(shù)據(jù)塊兒讀寫,有一個(gè)Master、有一個(gè)請(qǐng)求者、有一個(gè)擁有者,請(qǐng)求者向Master請(qǐng)求數(shù)據(jù)塊兒的最新版本,Master把請(qǐng)求轉(zhuǎn)發(fā)給擁有者,擁有者按照請(qǐng)求信息把數(shù)據(jù)塊兒傳送給申請(qǐng)者,然后加鎖進(jìn)行讀寫。這一過程是需要有大量的數(shù)據(jù)傳輸和競爭存在的,一旦這個(gè)事情成為多數(shù),那么勢(shì)必造成節(jié)點(diǎn)間的通訊負(fù)載過大,造成大量的鎖等待時(shí)間,嚴(yán)重影響數(shù)據(jù)庫整體性能。尤其是在做跨數(shù)據(jù)中心高可用的場(chǎng)合下。因此我們只要做到業(yè)務(wù)級(jí)別的并發(fā)處理,而不要追求一個(gè)SQL級(jí)別的絕對(duì)并發(fā)。物極必反的道理就在于此。因此把參數(shù)打開,使得進(jìn)程級(jí)別并發(fā)實(shí)現(xiàn)本地化處理,不要跨節(jié)點(diǎn)處理。在官方文檔 ID 1536272.1當(dāng)中,必須優(yōu)化的參數(shù)就包括這個(gè)。
SQL> alter system set parallel_force_local=true scope=spfile sid='*';
7.8 關(guān)于自動(dòng)任務(wù)
Oracle 11g 數(shù)據(jù)庫有三個(gè)預(yù)定義自動(dòng)維護(hù)任務(wù):
1. Automatic Optimizer Statistics Collection(自動(dòng)優(yōu)化器統(tǒng)計(jì)信息收集): 收集數(shù)據(jù)庫中所有無統(tǒng)計(jì)信息或僅有過時(shí)統(tǒng)計(jì)信息的 Schema 對(duì)象的 Optimizer(優(yōu)化器)統(tǒng)計(jì)信息。QL query optimizer(SQL 查詢優(yōu)化器)使用此任務(wù)收集的統(tǒng)計(jì)信息提高 SQL 執(zhí)行的性能。
2. Automatic Segment Advisor(自動(dòng)段指導(dǎo)): 識(shí)別有可用回收空間的段,并提出如何消除這些段中的碎片的建議。也可以手動(dòng)運(yùn)行 Segment Advisor 獲取更多最新建議。
3. Automatic SQL Tuning Advisor(自動(dòng) SQL 優(yōu)化指導(dǎo)):檢查高負(fù)載 SQL 語句的性能,并提出如何優(yōu)化這些語句的建議。您可以配置此指導(dǎo),自動(dòng)應(yīng)用建議的SQL profile。
關(guān)于統(tǒng)計(jì)信息收集,數(shù)據(jù)庫是有其自己的默認(rèn)啟動(dòng)時(shí)間,11g是在22:00-2:00之間,假設(shè)這個(gè)時(shí)間跟我們的跑批時(shí)間有沖突的話,我們可以修改器具體執(zhí)行時(shí)間。但是這個(gè)任務(wù)必須保留。關(guān)于其他的兩個(gè)優(yōu)化指導(dǎo),其實(shí)要看我們實(shí)際工作中用到的幾率是否很高,是否有價(jià)值留著給我們提供一些優(yōu)化的理論指導(dǎo)。如果感覺意義不大,可以不用。
7.9 安全方面的配置優(yōu)化
首先、是數(shù)據(jù)庫要不要保留審計(jì)?如何保留?
假設(shè)不打開審計(jì),那么將來出來安全問題,我們無法尋找線索;假設(shè)打開,那么很可能因?yàn)槭沟脤徲?jì)日志占用大量的存儲(chǔ)空間,甚至影響數(shù)據(jù)庫IO性能。一般情況下還是需要對(duì)一些基本登錄行為的審計(jì),但是我們可以把日志位置修改制定到操作系統(tǒng)層面減少數(shù)據(jù)庫層因此的性能壓力,而且應(yīng)該定期轉(zhuǎn)儲(chǔ),減少碎文件太多而把文件系統(tǒng)i節(jié)點(diǎn)用光的極端情況。可以通過對(duì)參數(shù)"audit_trail"以及adump參數(shù)的調(diào)整來實(shí)現(xiàn)此項(xiàng)優(yōu)化。
接著、alert日志和trace文件的控制參數(shù)。
max_dump_file_size,它決定了這些文件的大小限制,默認(rèn)情況下是unlimited,如果生成了很大的文件,就會(huì)達(dá)到OS對(duì)文件上限的要求,導(dǎo)致寫入失敗。
SQL> alter system set max_dump_file_size='100m' scope=spfile sid='*';
7.10 parallel_min_servers
這個(gè)參數(shù)決定了實(shí)例可以并行執(zhí)行的進(jìn)程的最大數(shù)目。設(shè)置太小查詢進(jìn)程沒有并行執(zhí)行能力。如果設(shè)置太大,那么可能會(huì)導(dǎo)致內(nèi)存資源緊張,從而影響系統(tǒng)整體性能。確保監(jiān)控活動(dòng)并行服務(wù)器進(jìn)程的數(shù)量并計(jì)算要應(yīng)用于 parallel_min_servers 的平均值。可通過以下操作完成:
SQL> select * from v$pq_syssstat;
查看列值 "Servers Highwater";
根據(jù)硬件情況優(yōu)化 parallel_max_servers的值。最開始可以使用 (2 * ( 2 個(gè)線程 ) (CPU_COUNT)) = 4 x CPU 計(jì)算,然后使用測(cè)試數(shù)據(jù)對(duì)更高的值重復(fù)測(cè)試。一般OLTP系統(tǒng)需限制其不超過128(ORACLE的默認(rèn)算法有BUG,在cpu核數(shù)超過128,默認(rèn)并行參數(shù)設(shè)置過高時(shí),容易被觸發(fā),會(huì)導(dǎo)數(shù)oracle無法啟動(dòng)。另外,如果這個(gè)參數(shù)太高,并行的進(jìn)程開的太大了,會(huì)導(dǎo)數(shù)數(shù)據(jù)庫無法承受并發(fā)壓力)。
SQL> alter system set parallel_max_servers=128 scope=spfile sid='';
7.11 fast_start_mttr_target & fast_start_parallel_rollback
fast_start_mttr_target={0-3600} 一旦設(shè)置具體值,那么崩潰恢復(fù)將在此要求的時(shí)間范圍內(nèi)完成。fast_start_parallel_rollback={high/low/false},high啟動(dòng)4倍于CPU數(shù)目的并行恢復(fù)進(jìn)程,low啟動(dòng)2倍于CPU數(shù)目的并行恢復(fù)進(jìn)程,false關(guān)閉并行恢復(fù)進(jìn)程。這兩個(gè)參數(shù)都是用來加速在故障場(chǎng)合下的奔潰恢復(fù),其根本的機(jī)制就是要通過主動(dòng)觸發(fā)checkpoint來縮短最近依次checkpoint和聯(lián)機(jī)重做日志之間的距離。但是這個(gè)無疑會(huì)帶來一定的性能風(fēng)險(xiǎn)。所以這兩個(gè)值的設(shè)置需要根據(jù)具體業(yè)務(wù)情況來設(shè)置,同時(shí)要進(jìn)行壓力測(cè)試,不要因?yàn)榧みM(jìn)的策略帶來性能問題。
與此相關(guān)還有一個(gè)參數(shù)log_checkpoints_to_alert,默認(rèn)是關(guān)閉狀態(tài)。打開這個(gè)參數(shù)會(huì)在trace文件當(dāng)中記錄詳細(xì)的檢查點(diǎn)發(fā)生信息,對(duì)于數(shù)據(jù)庫診斷來講是一個(gè)必不可少的功能。因此建議打開。
SQL> alter system set fast_start_mttr_target=120 scope=spfile sid='';
SQL> alter system set fast_start_parallel_rollback=low scope=spfile sid='';
SQL> alter system set log_checkpoints_to_alert=true scope=spfile sid='*';
7.12 listener.ora
對(duì)于11.2之前的 listener, 首先得保證IPC項(xiàng)存在,且此項(xiàng)列在所有RAC listener的地址列表的第一個(gè)。否則,可能會(huì)對(duì) VIP 在公網(wǎng)接口出現(xiàn)故障時(shí)進(jìn)行故障轉(zhuǎn)移所用的時(shí)長產(chǎn)生不利影響。
LISTENER_n1 =
(DEION_LIST =
(DEION =
(ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC)))
(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = n1vip)(PORT = 1521)(IP = FIRST)))
(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.8.21.121)(PORT = 1521)(IP = FIRST)))
)
)
假設(shè)把TCP列到第一項(xiàng),那么監(jiān)聽需要等待TCP timeout,而TCP timeout是受操作系統(tǒng)相關(guān)參數(shù)控制,并且timeout時(shí)間較長,那么就有可能引起故障轉(zhuǎn)移并不能非常及時(shí)的問題。
7.13 sqlnet.ora
數(shù)據(jù)庫連接的客戶端異常斷開后,其占有的相應(yīng)并沒有被釋放,如從v$session視圖中依舊可以看到對(duì)應(yīng)的session處于inactive,且對(duì)應(yīng)的服務(wù)器進(jìn)程也沒有釋放,導(dǎo)致資源長時(shí)間地被占用,對(duì)于這種情形開該如何處理呢?sqlnet.expire_time對(duì)于這個(gè)問題我們提供了解決方案,專門用于清理那些異常斷開的情形,如網(wǎng)絡(luò)異常中斷,客戶端異常掉電,異常重啟
文章題目:OracleRAC建設(shè)過程中各個(gè)層面關(guān)鍵點(diǎn)和優(yōu)化項(xiàng)總結(jié)
URL分享:http://vcdvsql.cn/article14/pccige.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、微信公眾號(hào)、App開發(fā)、自適應(yīng)網(wǎng)站、企業(yè)建站、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)