windows2000+oracle記憶體8G SAG調整(一)

hzh_hu發表於2005-12-15
記憶體調優 記憶體最佳化是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檔案在%CDROM%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有兩個例項執行在一個節點訪問同一個資料庫。這能克服每個程式的記憶體限制,又提供某些其它的利益,如應用程式失敗檢測。[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/95530/viewspace-811713/,如需轉載,請註明出處,否則將追究法律責任。

相關文章