天天看點

在Windows 2000下優化Oracle9i性能

導讀:

  一、優化磁盤配置

  Oracle是一個磁盤I/O強烈的應用,要確定你恰當地配置磁盤和檔案系統:

  在磁盤上建立資料檔案前首先運作磁盤碎片整理程式

  為了安全地整理磁盤碎片,需關閉打開資料檔案的執行個體,并且停止服務。如果你有足夠的連續磁盤空間建立資料檔案,那麼你就很容易避免資料檔案産生碎片。

  不要使用磁盤壓縮

  Oracle資料檔案不支援磁盤壓縮。

  不要使用磁盤加密

  加密象磁盤壓縮一樣增加了一個處理層降低磁盤讀寫速度。如果你擔心自己的資料可能洩密,就使用dbms_obfuscation包和label security選擇性地加密資料的敏感部分。

  不要使用超過70%的磁盤空間

  剩餘的磁盤空間存放系統臨時資料和作為磁盤碎片整理程式存放中間資料。

  使用RAID

  選擇硬體RAID超過軟體RAID;

  帶有硬體RAID控制器;

  日志檔案不要放在RAID 5卷上,因為RAID 5讀性能高而寫性能差。

  把日志檔案和歸檔日志放在與控制檔案和資料檔案分離的磁盤控制系統。

  分離頁面交換檔案到多個磁盤實體卷

  跨越至少兩個磁盤建立兩個頁面檔案。你可以建立四個頁面檔案并在性能上受益,確定所有頁面檔案的大小之和至少是實體記憶體的兩倍。

  二、優化CPU使用和配置

  取消螢幕保護

  螢幕保護吸取大量的CPU資源而且提供的是對資料庫伺服器毫無意義的用處,特别要禁止3GL螢幕保護,如果你必須使用螢幕保護就用“空螢幕”減少CPU使用。

  把系統配置為應用伺服器

  運作控制台的“系統”,在進階頁籤中設定“性能選項”到“背景程式”,這提供優先權給應用程式,象類似Oracle的服務,反對使用者在圖形使用者界面啟動一個笨拙的程式。

  監視系統中消耗中斷的硬體

  消耗CPU中斷和時間的硬體應該避免使用。通常這樣的硬體是便宜的因為它把工作載入CPU,而CPU要處理外圍的進階性能的硬體,通常需要注意:

  1、支援總線控制的網卡

  2、支援DMA而不支援PIO的磁盤控制器

  使用性能螢幕跟蹤處理器對象的%Interrupt Time 計數器數值,和這個計數器的基線和标準,然後監視問題。

  3、有利避免中斷的方式是使用硬體RAID控制器代替Windows 2000支援的軟體RAID。

  保持最小的安全審計記錄

  在專用伺服器上運作Oracle

  Oracle是記憶體消耗大戶,不要在執行下列功能的系統上運作Oracle資料庫:

  1、主域或備份域控制器(Windows 2000下都稱域控制器)

  2、檔案伺服器

  3、列印伺服器

  4、遠端通路伺服器

  5、路由器、代理或防火牆

  不要使用花哨的桌面(如果使用,要盡量減小桌面檔案大小)

  禁止非必須的服務

  最好禁止系統裡非必須的服務,如果時而需要某些服務功能,可将啟動類型設定為“手動”,要做到這一點首先同網絡管理者驗證明際的服務需求:

  1、如果你的系統不需要列印機,通常停止這個服務并設定為手動;

  2、停止License Logging Service服務除非你對它有特殊要求;

  3、不應該使用DHCP服務,并禁止它;

  4、不要自動啟動你不需要的程式;

  檢查菜單“開始/程式/啟動”裡的内容,删除不需要的程式。

  三、優化網絡配置

  網絡配置是性能調整的一項很重要的内容,而且很容易隐藏性能瓶頸。

  配置網卡使用最快速度和有效模式

  這針對自動檢測,大多數預設安裝是NIC,如果這是可選的就盡量調整為“全雙工”和最大化線速度。

  删除不需要的網絡協定

  隻保留TCP/IP協定。

  優化網絡協定綁定順序

  在每個網卡上設定主協定,典型地是TCP/IP,到協定清單的頂端。

  為Oracle禁止或優化檔案共享

  理想地應該禁止檔案共享功能來最小化安全洩露和網絡交通,但如果你需要使用檔案和列印共享,那麼就配置系統中每個網卡的“連接配接屬性”,設定“最大化網絡應用程式資料吞吐量”

  四、記憶體調優

  記憶體優化是Windows平台的關鍵設定,首先了解一下Windows 2000平台的Oracle結構:

  基于線程的結構

  Windows2000是基于線程的結構,相反,Unix作業系統是基于程序的結構。這意味着Windows中更多的應用,包括Oracle在内,是以帶有多個線程的單個程序的形式執行,這種基于線程的結構的确給Window2000帶來優勢——更容易共享記憶體。記憶體空間為每個程序配置設定,程序間共享記憶體很笨拙,要使用附加編碼,線程是程序的子集,使用比程序少得多的記憶體。特定程序的所有線程共享同樣的程序記憶體空間,同一程序的線程間共享記憶體比不同程序共享記憶體要快,這給基于線程的結構很大優勢,更有效。

  在伺服器上運作的每個應用程式都有一個,而且隻有一個程序。程序是應用程式的載體,是用來容納執行應用程式實際工作的線程的。從使用者角度看,程序是不用任何專門工具就可以看到的元件。程序對其他應用程式元件的作用就像容器一樣。它持有虛拟的存儲空間、資料、系統資源和應用程式設定。雖然線程可以配置設定、重新配置設定和釋放記憶體,但是程序接受初始的記憶體配置設定,并将它配置設定到請求記憶體的所有線程。線程是包含在程序内共享所有程序資源的單個執行路徑。它還包含堆棧(存儲在記憶體中的變量和其他資料)、CPU寄存器的狀态資訊(是以,線程可以恢複它的環境)、和在系統排程程式的執行清單中的一個登入項。每個線程規定了完成任務應用程式需要作的某種工作。

  使用Task Manager的主要問題是看不到任何線程。Task Manager被設計成從程序層将應用程式作為整體看待。當然還可以使用性能螢幕來監視Windows下的Oracle記憶體使用。

  從“開始/程式/管理工具”選擇“性能”啟動“系統螢幕”。注意,“性能”包括兩個MMC插件:“系統螢幕”和“性能日志和變更”。這時,需要一些被監視的計數器(計數器是一些性能訓示器,用于對 Windows 2000的特殊對象進行統計,例如統計特定線程所要求的處理器時間)。單擊“添加”按鈕(在圖中看起來象一個加号),将看到“添加計數器”對話框。首先需要選擇想監視的“性能”對象。在包含“程序”對象和“線程”對象的“性能”下拉清單中選擇。

  程序觀察器(Process Viewer)是比較容易檢查線程和程序的方法之一。可以在 Windows 2000 Support Tools 或Windows 2000 Resource Kit内找到一些工具。Windows 2000 Support Tools是Windows 2000的一部分,但是并不自動安裝。支援安裝的Windows Installer檔案在ROM%SUPPORTTOOLS目錄下。隻要在2000RKST.MSJ上右擊,并從context菜單上選擇安裝即可。

  記憶體

  基于線程的結構的确有一些記憶體限制,因為單個程序由線程組成,而程序的位址空間是受限的,是以很少有空間是機動的。因為Windows 2000仍然是32為作業系統,單個程序位址空間被限制在4GB内,其中一半被作業系統保留,這2GB被OS保留的系統記憶體也被視為系統位址空間,他包括OS核心編碼、硬體抽象層編碼(HAL)和需要管理程序和OS互動的不同的其它結構,這2GB的系統位址空間是禁止應用程式程序通路的。是以,Windows 2000标準伺服器單個應用程式程序可使用記憶體空間共2GB。在Windows 2000進階伺服器啟動檔案boot.ini中有/3GB開關,改變這個比例到3GB,這項技術被稱作4GB調優(4-gigabyte tuning,或4GT),我們将針對這個問題展開詳細讨論。

  保留的記憶體是配置設定給線程的記憶體并且留作将來使用,但沒有實際使用的記憶體。因為沒有實際使用,是以它對其它程序仍然有效。但是,因為它已經被配置設定,它仍然由對擁有線程的程序的總的記憶體限制産生,是以,保留記憶體的計算針對2GB或3GB的限制,并且程序保留的和使用的記憶體的總和不能超過這個限制。

  除了系統中安裝的實體記憶體之外,Windows 2000還使用虛拟記憶體。這實際上是駐留在硬碟上的記憶體。但是Windows 2000使得它對應用程式來說,就像是安裝在機器上記憶體一樣。當某個應用程式塊要求通路那個記憶體時,Windows 2000就把另外的記憶體塊複制到磁盤上,而把所要求的記憶體放到實體記憶體中,這些記憶體塊的大小是4KB。也就是說,每次應用程式提出對記憶體的要求時,記憶體就被配置設定在4KB的頁面内。在磁盤上模拟記憶體的檔案叫做頁面排程檔案。Virtual Memory Manager(VMM虛拟記憶體管理器)是作業系統管理機器上的虛拟記憶體元件。所有的記憶體通路都通過VMM。這意味着每當作業系統需要進行記憶體調頁時,就要提出VMM請求。

  記憶體調優方法:

  (一)使用超過4GB的記憶體

  另外,有辦法允許為單個程序或應用配置設定超過32位位址空間的記憶體,為實作這一點,Windows 2000使用實體位址擴充(physical address extensions ,或PAE),PAE本質上把位址空間從32位增加到36位,但是必須有Pentium Pro或更新的處理器才能享受這個優勢。在Windows NT 4.0下,Intel提供PSE36驅動程式享受全部36位位址空間的優勢,但是在Windows 2000 Advanced Server中36位位址空間的支援已經建立在作業系統中,然而,應用程式必須使用位址視窗擴充(Address Windowing Extensions ,或AWE)API寫成,Oracle9i 發行号1(Release 1)不支援AWE,所有的Oracle 8i發行号(releases 8.1.5–8.1.7)都支援AWE。Oracle在9i發行号2(Release 2)中實作了對AWE的支援。

  (二)AWE和Windows 2000

  AWE允許你使用系統中任何附加的超過4GB的記憶體,為了展現這個優勢,你必須有超過4GB的記憶體,必須有Pentium Pro或更新的處理器,必須運作Windows 2000進階伺服器或Windows 2000資料中心伺服器,不需要特殊的驅動程式,因為Windows 2000已經支援AWE。

  為了利用這項優勢,必須在啟動Windows 2000機器時在boot.ini檔案中使用/PAE開關,你必須確定運作Oracle服務的帳戶有Lock Pages in Memory權限。給運作Oracle服務的帳戶增加Lock Pages in Memory權限後,要重新啟動OracleService 服務。

  (三)AWE和Oracle

  可以确定,Oracle8i所有發行号版本和Oracle9i發行号2隻允許你為資料庫塊緩沖區配置超過4GB限制的記憶體空間,是以,要為使用者連接配接釋放标準程序位址空間的記憶體(低于3GB界限的記憶體)、PGA記憶體群組成SGA的不同記憶體緩沖池。

  在初始化參數檔案init.ora中要設定參數USE_INDIRECT_DATA_BUFFERS=TRUE,沒有這個參數,Oracle不能尋址到4GB以上的位址空間。接下來要設定決定記憶體使用總量的緩沖池大小,設定DB_BLOCK_SIZE和DB_BLOCK_BUFFERS兩個參數。

  在Oracle9i發行号2中,參數DB_BLOCK_BUFFERS被參數DB_CACHE_SIZE所代替,這樣就改變了原來指定緩沖區塊數到指定緩沖區位元組數,同樣,也解釋了在Oracle9i發行号2的一個資料庫中支援多個資料庫塊大小。無論用哪種辦法,如果你設定參數USE_INDIRECT_BUFFERS=TRUE,你将隻能定義和使用單個資料庫塊大小和塊緩沖區(就象在9i以前的發行号中),是以,如果預設資料庫塊大小是4k、8k或其它,而設定DB_2k_CACHE_SIZE是不允許的。

  接下來需要在系統資料庫中為ORACLE_HOME設定合适的AWE_WINDOW_MEMORY參數值,也就是在HKEY_LOCAL_MACHINE SoftwareOracleHOME0下,這個參數指定位元組數,如果沒有設定,預設值是1 GB。這個參數的大小取決于你要設定多少緩沖區大小,并視為來自3GB程序位址空間的正常記憶體。以緩沖區大小為6 GB為例,設定AWE_WINDOW_MEMORY為預設值1GB,你希望1GB 視為正常記憶體,并且剩餘5GB緩沖區來自4GB限制以上的位址空間。你希望更多的緩沖池盡可能保留在正常位址空間,因為通路超過4GB以上的緩沖池比通路虛拟位址空間緩沖池要慢(盡管仍然比磁盤I/O操作快)。

  (四)解決與AWE相關的記憶體問題

  需要注意的是每個4GB界限以上的塊緩沖區需要在正常位址空間保留大約200位元組的緩沖區頭,是以,在上面的例子中,我們大約有312000個緩沖區頭指向擴充位址空間的緩沖區,緩沖區頭大約占80MB正常記憶體空間,如果資料庫塊很小,那麼這個數量會相當高,是以,必須確定這些緩沖區頭、AWE_WINDOW_MEMORY、和所有Oracle.exe程序的記憶體需求,包括編碼、SGA其它元件、PGA記憶體和每個使用者連接配接棧都适合Oracle.exe程序的正常3GB虛拟位址空間。

  确認你有足夠的實體記憶體處理超過AWE_WINDOW_MEMORY之外的DB_BLOCK_BUFFERS,在我們的例子中定義緩沖池大小為6GB,1GB來自正常位址空間,剩餘5GB來自4GB以外的對整個程序有效的系統和程序位址空間,是以,這個例子隻能工作在至少有9GB記憶體的機器上,你還應該為其它程序保留一些空間,隻有一個程序可以在某一時刻通路附加的記憶體。

  象前面所說的那樣,/PAE開關隻用于系統有超過4GB實體記憶體的時候,但如果系統記憶體少于4GB時,也可模仿這項功能。在boot.ini檔案中設定MAXMEM參數的值,如下面例子,設為2GB,意味着任何2GB以上的記憶體都将保留為AWE記憶體。

  multi(0)disk(0)rdisk(0)partition(1)WINNT="Microsoft Windows 2000 Advanced

  Server" /fastdetect /PAE /MAXMEM:2048

  為一個資料庫使用附加的多個程序

  真正的應用叢集(Real Applications Clusters,RAC)提供有多個執行個體運作和通路同一資料的能力。通常,這用于有兩個或多個節點的項目,一個執行個體運作在每個節點。無論如何,它支援在Oracle9i有兩個執行個體運作在一個節點通路同一個資料庫。這能克服每個程序的記憶體限制,又提供某些其它的利益,如應用程式失敗檢測。

本文轉自

<a href="http://oracle.itpub.net/post/20957/223634">http://oracle.itpub.net/post/20957/223634</a>