Windows 2000下優(yōu)化Oracle9i性能
2024-08-29 13:32:58
供稿:網(wǎng)友
windows 2000下的Oracle性能優(yōu)化需要考慮磁盤I/O、CPU、網(wǎng)絡(luò)子系統(tǒng)、內(nèi)存幾個(gè)子系統(tǒng),這里著重介紹Oracle在Windows 2000環(huán)境下的內(nèi)存調(diào)整。 優(yōu)化磁盤配置 Oracle是一個(gè)磁盤I/O強(qiáng)烈的應(yīng)用,要確保你恰當(dāng)?shù)嘏渲么疟P和文件系統(tǒng): 在磁盤上建立數(shù)據(jù)文件前首先運(yùn)行磁盤碎片整理程序 為了安全地整理磁盤碎片,需關(guān)閉打開數(shù)據(jù)文件的實(shí)例,并且停止服務(wù)。假如你有足夠的連續(xù)磁盤空間建立數(shù)據(jù)文件,那么你就很輕易避免數(shù)據(jù)文件產(chǎn)生碎片。 不要使用磁盤壓縮 Oracle數(shù)據(jù)文件不支持磁盤壓縮。 不要使用磁盤加密 加密象磁盤壓縮一樣增加了一個(gè)處理層降低磁盤讀寫速度。假如你擔(dān)心自己的數(shù)據(jù)可能泄密,就使用dbms_obfuscation包和label security選擇性地加密數(shù)據(jù)的敏感部分。 不要使用超過70%的磁盤空間 剩余的磁盤空間存放系統(tǒng)臨時(shí)數(shù)據(jù)和作為磁盤碎片整理程序存放中間數(shù)據(jù)。
使用RAID 選擇硬件RAID超過軟件RAID; 帶有硬件RAID控制器; 日志文件不要放在RAID 5卷上,因?yàn)镽AID 5讀性能高而寫性能差。 把日志文件和歸檔日志放在與控制文件和數(shù)據(jù)文件分離的磁盤控制系統(tǒng)。 分離頁面交換文件到多個(gè)磁盤物理卷 跨越至少兩個(gè)磁盤建立兩個(gè)頁面文件。你可以建立四個(gè)頁面文件并在性能上受益,確保所有頁面文件的大小之和至少是物理內(nèi)存的兩倍。 優(yōu)化CPU使用和配置 取消屏幕保護(hù) 屏幕保護(hù)吸取大量的CPU資源而且提供的是對(duì)數(shù)據(jù)庫服務(wù)器毫無意義的用處,非凡要禁止3GL屏幕保護(hù),假如你必須使用屏幕保護(hù)就用“空屏幕”減少CPU使用。 把系統(tǒng)配置為應(yīng)用服務(wù)器 運(yùn)行控制面板的“系統(tǒng)”,在高級(jí)選項(xiàng)卡中設(shè)置“性能選項(xiàng)”到“后臺(tái)程序”,這提供優(yōu)先權(quán)給應(yīng)用程序,象類似Oracle的服務(wù),反對(duì)用戶在圖形用戶界面啟動(dòng)一個(gè)笨拙的程序。 監(jiān)視系統(tǒng)中消耗中斷的硬件 消耗CPU中斷和時(shí)間的硬件應(yīng)該避免使用。通常這樣的硬件是便宜的因?yàn)樗压ぷ鬏d入CPU,而CPU要處理外圍的高級(jí)性能的硬件,通常需要注重: 1、支持總線控制的網(wǎng)卡 2、支持DMA而不支持PIO的磁盤控制器 使用性能監(jiān)視器跟蹤處理器對(duì)象的%Interrupt Time 計(jì)數(shù)器數(shù)值,和這個(gè)計(jì)數(shù)器的基線和標(biāo)準(zhǔn),然后監(jiān)視問題。 3、有利避免中斷的方式是使用硬件RAID控制器代替Windows 2000支持的軟件RAID。 保持最小的安全審計(jì)記錄 在專用服務(wù)器上運(yùn)行Oracle Oracle是內(nèi)存消耗大戶,不要在執(zhí)行下列功能的系統(tǒng)上運(yùn)行Oracle數(shù)據(jù)庫: 1、主域或備份域控制器(Windows 2000下都稱域控制器) 2、文件服務(wù)器 3、打印服務(wù)器
4、遠(yuǎn)程訪問服務(wù)器 5、路由器、代理或防火墻 不要使用花哨的壁紙(假如使用,要盡量減小壁紙文件大小 禁止非必須的服務(wù) 最好禁止系統(tǒng)里非必須的服務(wù),假如時(shí)而需要某些服務(wù)功能,可將啟動(dòng)類型設(shè)置為“手動(dòng)”,要做到這一點(diǎn)首先同網(wǎng)絡(luò)治理員驗(yàn)證實(shí)際的服務(wù)需求: 1、假如你的系統(tǒng)不需要打印機(jī),通常停止這個(gè)服務(wù)并設(shè)置為手動(dòng); 2、停止License Logging Service服務(wù)除非你對(duì)它有非凡要求; 3、不應(yīng)該使用DHCP服務(wù),并禁止它; 4、不要自動(dòng)啟動(dòng)你不需要的程序; 檢查菜單“開始/程序/啟動(dòng)”里的內(nèi)容,刪除不需要的程序。 優(yōu)化網(wǎng)絡(luò)配置 網(wǎng)絡(luò)配置是性能調(diào)整的一項(xiàng)很重要的內(nèi)容,而且很輕易隱藏性能瓶頸。 配置網(wǎng)卡使用最快速度和有效模式 這針對(duì)自動(dòng)檢測(cè),大多數(shù)缺省安裝是NIC,假如這是可選的就盡量調(diào)整為“全雙工”和最大化線速度。 刪除不需要的網(wǎng)絡(luò)協(xié)議 只保留TCP/ip協(xié)議。 優(yōu)化網(wǎng)絡(luò)協(xié)議綁定順序 在每個(gè)網(wǎng)卡上設(shè)置主協(xié)議,典型地是TCP/IP,到協(xié)議列表的頂端。 為Oracle禁止或優(yōu)化文件共享 理想地應(yīng)該禁止文件共享功能來最小化安全泄露和網(wǎng)絡(luò)交通,但假如你需要使用文件和打印共享,那么就配置系統(tǒng)中每個(gè)網(wǎng)卡的“連接屬性”,設(shè)置“最大化網(wǎng)絡(luò)應(yīng)用程序數(shù)據(jù)吞吐量” 內(nèi)存調(diào)優(yōu) 內(nèi)存優(yōu)化是Windows平臺(tái)的要害設(shè)置,首先了解一下Windows 2000平臺(tái)的Oracle結(jié)構(gòu):
基于線程的結(jié)構(gòu) Windows2000是基于線程的結(jié)構(gòu),相反,Unix操作系統(tǒng)是基于進(jìn)程的結(jié)構(gòu)。這意味著Windows中更多的應(yīng)用,包括Oracle在內(nèi),是以帶有多個(gè)線程的單個(gè)進(jìn)程的形式執(zhí)行,這種基于線程的結(jié)構(gòu)的確給Window2000帶來優(yōu)勢(shì)——更輕易共享內(nèi)存。內(nèi)存空間為每個(gè)進(jìn)程分配,進(jìn)程間共享內(nèi)存很笨拙,要使用附加編碼,線程是進(jìn)程的子集,使用比進(jìn)程少得多的內(nèi)存。特定進(jìn)程的所有線程共享同樣的進(jìn)程內(nèi)存空間,同一進(jìn)程的線程間共享內(nèi)存比不同進(jìn)程共享內(nèi)存要快,這給基于線程的結(jié)構(gòu)很大優(yōu)勢(shì),更有效。 在服務(wù)器上運(yùn)行的每個(gè)應(yīng)用程序都有一個(gè),而且只有一個(gè)進(jìn)程。進(jìn)程是應(yīng)用程序的載體,是用來容納執(zhí)行應(yīng)用程序?qū)嶋H工作的線程的。從用戶角度看,進(jìn)程是不用任何專門工具就可以看到的組件。進(jìn)程對(duì)其他應(yīng)用程序組件的作用就像容器一樣。它持有虛擬的存儲(chǔ)空間、數(shù)據(jù)、系統(tǒng)資源和應(yīng)用程序設(shè)置。雖然線程可以分配、重新分配和釋放內(nèi)存,但是進(jìn)程接受初始的內(nèi)存分配,并將它分配到請(qǐng)求內(nèi)存的所有線程。線程是包含在進(jìn)程內(nèi)共享所有進(jìn)程資源的單個(gè)執(zhí)行路徑。它還包含堆棧(存儲(chǔ)在內(nèi)存中的變量和其他數(shù)據(jù))、CPU寄存器的狀態(tài)信息(所以,線程可以恢復(fù)它的環(huán)境)、和在系統(tǒng)調(diào)度程序的執(zhí)行列表中的一個(gè)登錄項(xiàng)。每個(gè)線程規(guī)定了完成任務(wù)應(yīng)用程序需要作的某種工作。 使用Task Manager的主要問題是看不到任何線程。Task Manager被設(shè)計(jì)成從進(jìn)程層將應(yīng)用程序作為整體看待。當(dāng)然還可以使用性能監(jiān)視器來監(jiān)視Windows下的Oracle內(nèi)存使用。 從“開始/程序/治理工具”選擇“性能”啟動(dòng)“系統(tǒng)監(jiān)視器”。注重,“性能”包括兩個(gè)MMC插件:“系統(tǒng)監(jiān)視器”和“性能日志和變更”。這時(shí),需要一些被監(jiān)視的計(jì)數(shù)器(計(jì)數(shù)器是一些性能指示器,用于對(duì) Windows 2000的非凡對(duì)象進(jìn)行統(tǒng)計(jì),例如統(tǒng)計(jì)特定線程所要求的處理器時(shí)間)。單擊“添加”按鈕(在圖中看起來象一個(gè)加號(hào)),將看到“添加計(jì)數(shù)器”對(duì)話框。首先需要選擇想監(jiān)視的“性能”對(duì)象。在包含“進(jìn)程”對(duì)象和“線程”對(duì)象的“性能”下拉列表中選擇。 進(jìn)程觀察器(PRocess Viewer)是比較輕易檢查線程和進(jìn)程的方法之一。可以在 Windows 2000 Support Tools 或Windows 2000 Resource Kit內(nèi)找到一些工具。Windows 2000 Support Tools是Windows 2000的一部分,但是并不自動(dòng)安裝。支持安裝的Windows Installer文件在%CDROM%/SUPPORT/TOOLS/目錄下。只要在2000RKST.MSJ上右擊,并從context菜單上選擇安裝即可。 內(nèi)存 基于線程的結(jié)構(gòu)的確有一些內(nèi)存限制,因?yàn)閱蝹€(gè)進(jìn)程由線程組成,而進(jìn)程的地址空間是受限的,因此很少有空間是機(jī)動(dòng)的。因?yàn)閃indows 2000仍然是32為操作系統(tǒng),單個(gè)進(jìn)程地址空間被限制在4GB內(nèi),其中一半被操作系統(tǒng)保留,這2GB被OS保留的系統(tǒng)內(nèi)存也被視為系統(tǒng)地址空間,他包括OS內(nèi)核編碼、硬件抽象層編碼(HAL)和需要治理進(jìn)程和OS交互的不同的其它結(jié)構(gòu),這2GB的系統(tǒng)地址空間是禁止應(yīng)用程序進(jìn)程訪問的。因此,Windows 2000標(biāo)準(zhǔn)服務(wù)器單個(gè)應(yīng)用程序進(jìn)程可使用內(nèi)存空間共2GB。在Windows 2000高級(jí)服務(wù)器啟動(dòng)文件boot.ini中有/3GB開關(guān),改變這個(gè)比例到3GB,這項(xiàng)技術(shù)被稱作4GB調(diào)優(yōu)(4-gigabyte tuning,或4GT),我們將針對(duì)這個(gè)問題展開具體討論。 保留的內(nèi)存是分配給線程的內(nèi)存并且留作將來使用,但沒有實(shí)際使用的內(nèi)存。因?yàn)闆]有實(shí)際使用,因此它對(duì)其它進(jìn)程仍然有效。但是,因?yàn)樗呀?jīng)被分配,它仍然由對(duì)擁有線程的進(jìn)程的總的內(nèi)存限制產(chǎn)生,因此,保留內(nèi)存的計(jì)算針對(duì)2GB或3GB的限制,并且進(jìn)程保留的和使用的內(nèi)存的總和不能超過這個(gè)限制。 除了系統(tǒng)中安裝的物理內(nèi)存之外,Windows 2000還使用虛擬內(nèi)存。這實(shí)際上是駐留在硬盤上的內(nèi)存。但是Windows 2000使得它對(duì)應(yīng)用程序來說,就像是安裝在機(jī)器上內(nèi)存一樣。當(dāng)某個(gè)應(yīng)用程序塊要求訪問那個(gè)內(nèi)存時(shí),Windows 2000就把另外的內(nèi)存塊復(fù)制到磁盤上,而把所要求的內(nèi)存放到物理內(nèi)存中,這些內(nèi)存塊的大小是4KB。也就是說,每次應(yīng)用程序提出對(duì)內(nèi)存的要求時(shí),內(nèi)存就被分配在4KB的頁面內(nèi)。在磁盤上模擬內(nèi)存的文件叫做頁面調(diào)度文件。Virtual Memory Manager(VMM虛擬內(nèi)存治理器)是操作系統(tǒng)治理機(jī)器上的虛擬內(nèi)存組件。所有的內(nèi)存訪問都通過VMM。這意味著每當(dāng)操作系統(tǒng)需要進(jìn)行內(nèi)存調(diào)頁時(shí),就要提出VMM請(qǐng)求。 內(nèi)存調(diào)優(yōu)方法: (一)使用超過4GB的內(nèi)存 另外,有辦法答應(yīng)為單個(gè)進(jìn)程或應(yīng)用分配超過32位地址空間的內(nèi)存,為實(shí)現(xiàn)這一點(diǎn),Windows 2000使用物理地址擴(kuò)展(physical address extensions ,或PAE),PAE本質(zhì)上把地址空間從32位增加到36位,但是必須有Pentium Pro或更新的處理器才能享受這個(gè)優(yōu)勢(shì)。在Windows NT 4.0下,Intel提供PSE36驅(qū)動(dòng)程序享受全部36位地址空間的優(yōu)勢(shì),但是在Windows 2000 Advanced Server中36位地址空間的支持已經(jīng)建立在操作系統(tǒng)中,然而,應(yīng)用程序必須使用地址窗口擴(kuò)展(Address Windowing Extensions ,或AWE)API寫成,Oracle9i 發(fā)行號(hào)1(Release 1)不支持AWE,所有的Oracle 8i發(fā)行號(hào)(releases 8.1.5–8.1.7)都支持AWE。Oracle在9i發(fā)行號(hào)2(Release 2)中實(shí)現(xiàn)了對(duì)AWE的支持。 (二)AWE和Windows 2000 AWE答應(yīng)你使用系統(tǒng)中任何附加的超過4GB的內(nèi)存,為了體現(xiàn)這個(gè)優(yōu)勢(shì),你必須有超過4GB的內(nèi)存,必須有Pentium Pro或更新的處理器,必須運(yùn)行Windows 2000高級(jí)服務(wù)器或Windows 2000數(shù)據(jù)中心服務(wù)器,不需要非凡的驅(qū)動(dòng)程序,因?yàn)閃indows 2000已經(jīng)支持AWE。 為了利用這項(xiàng)優(yōu)勢(shì),必須在啟動(dòng)Windows 2000機(jī)器時(shí)在boot.ini文件中使用/PAE開關(guān),你必須確保運(yùn)行Oracle服務(wù)的帳戶有Lock Pages in Memory權(quán)限。給運(yùn)行Oracle服務(wù)的帳戶增加Lock Pages in Memory權(quán)限后,要重新啟動(dòng)OracleService 服務(wù)。
(三)AWE和Oracle 可以確定,Oracle8i所有發(fā)行號(hào)版本和Oracle9i發(fā)行號(hào)2只答應(yīng)你為數(shù)據(jù)庫塊緩沖區(qū)配置超過4GB限制的內(nèi)存空間,因此,要為用戶連接釋放標(biāo)準(zhǔn)進(jìn)程地址空間的內(nèi)存(低于3GB界限的內(nèi)存)、PGA內(nèi)存和組成SGA的不同內(nèi)存緩沖池。 在初始化參數(shù)文件init.ora中要設(shè)置參數(shù)USE_INDIRECT_DATA_BUFFERS=TRUE,沒有這個(gè)參數(shù),Oracle不能尋址到4GB以上的地址空間。接下來要設(shè)置決定內(nèi)存使用總量的緩沖池大小,設(shè)定DB_BLOCK_SIZE和DB_BLOCK_BUFFERS兩個(gè)參數(shù)。 在Oracle9i發(fā)行號(hào)2中,參數(shù)DB_BLOCK_BUFFERS被參數(shù)DB_CACHE_SIZE所代替,這樣就改變了原來指定緩沖區(qū)塊數(shù)到指定緩沖區(qū)字節(jié)數(shù),同樣,也解釋了在Oracle9i發(fā)行號(hào)2的一個(gè)數(shù)據(jù)庫中支持多個(gè)數(shù)據(jù)庫塊大小。無論用哪種辦法,假如你設(shè)定參數(shù)USE_INDIRECT_BUFFERS=TRUE,你將只能定義和使用單個(gè)數(shù)據(jù)庫塊大小和塊緩沖區(qū)(就象在9i以前的發(fā)行號(hào)中),因此,假如缺省數(shù)據(jù)庫塊大小是4k、8k或其它,而設(shè)置DB_2k_CACHE_SIZE是不答應(yīng)的。 接下來需要在注冊(cè)表中為ORACLE_HOME設(shè)置合適的AWE_WINDOW_MEMORY參數(shù)值,也就是在HKEY_LOCAL_MACHINE/ Software/Oracle/HOME0下,這個(gè)參數(shù)指定字節(jié)數(shù),假如沒有設(shè)置,缺省值是1 GB。這個(gè)參數(shù)的大小取決于你要設(shè)置多少緩沖區(qū)大小,并視為來自3GB進(jìn)程地址空間的常規(guī)內(nèi)存。以緩沖區(qū)大小為6 GB為例,設(shè)置AWE_WINDOW_MEMORY為缺省值1GB,你希望1GB 視為常規(guī)內(nèi)存,并且剩余5GB緩沖區(qū)來自4GB限制以上的地址空間。你希望更多的緩沖池盡可能保留在常規(guī)地址空間,因?yàn)樵L問超過4GB以上的緩沖池比訪問虛擬地址空間緩沖池要慢(盡管仍然比磁盤I/O操作快)。 (四)解決與AWE相關(guān)的內(nèi)存問題 需要注重的是每個(gè)4GB界限以上的塊緩沖區(qū)需要在常規(guī)地址空間保留大約200字節(jié)的緩沖區(qū)頭,因此,在上面的例子中,我們大約有312000個(gè)緩沖區(qū)頭指向擴(kuò)展地址空間的緩沖區(qū),緩沖區(qū)頭大約占80MB常規(guī)內(nèi)存空間,假如數(shù)據(jù)庫塊很小,那么這個(gè)數(shù)量會(huì)相當(dāng)高,因此,必須確保這些緩沖區(qū)頭、AWE_WINDOW_MEMORY、和所有Oracle.exe進(jìn)程的內(nèi)存需求,包括編碼、SGA其它組件、PGA內(nèi)存和每個(gè)用戶連接棧都適合Oracle.exe進(jìn)程的常規(guī)3GB虛擬地址空間。 確認(rèn)你有足夠的物理內(nèi)存處理超過AWE_WINDOW_MEMORY之外的DB_BLOCK_BUFFERS,在我們的例子中定義緩沖池大小為6GB,1GB來自常規(guī)地址空間,剩余5GB來自4GB以外的對(duì)整個(gè)進(jìn)程有效的系統(tǒng)和進(jìn)程地址空間,因此,這個(gè)例子只能工作在至少有9GB內(nèi)存的機(jī)器上,你還應(yīng)該為其它進(jìn)程保留一些空間,只有一個(gè)進(jìn)程可以在某一時(shí)刻訪問附加的內(nèi)存。 象前面所說的那樣,/PAE開關(guān)只用于系統(tǒng)有超過4GB物理內(nèi)存的時(shí)候,但假如系統(tǒng)內(nèi)存少于4GB時(shí),也可模擬這項(xiàng)功能。在boot.ini文件中設(shè)置MAXMEM參數(shù)的值,如下面例子,設(shè)為2GB,意味著任何2GB以上的內(nèi)存都將保留為AWE內(nèi)存。 multi(0)disk(0)rdisk(0)partition(1)/WINNT="Microsoft Windows 2000 Advanced Server" /fastdetect /PAE /MAXMEM:2048 為一個(gè)數(shù)據(jù)庫使用附加的多個(gè)進(jìn)程 真正的應(yīng)用集群(Real applications Clusters,RAC)提供有多個(gè)實(shí)例運(yùn)行和訪問同一數(shù)據(jù)的能力。通常,這用于有兩個(gè)或多個(gè)節(jié)點(diǎn)的項(xiàng)目,一個(gè)實(shí)例運(yùn)行在每個(gè)節(jié)點(diǎn)。無論如何,它支持在Oracle9i有兩個(gè)實(shí)例運(yùn)行在一個(gè)節(jié)點(diǎn)訪問同一個(gè)數(shù)據(jù)庫。這能克服每個(gè)進(jìn)程的內(nèi)存限制,又提供某些其它的利益,如應(yīng)用程序失敗檢測(cè)。