2011-10-05

認識 32 位元版本的記憶體設定,以 SQL Server 2005、2008 為例;認識 AWE、PAE 與 3GB 參數

使用環境:
32 位元版本的 SQL Server 2005。
32 位元版本的 SQL Server 2008。

作業系統:Windows Server 2008 R2,目前僅提供 64 位元的版本。
但先前的 Windows Server 2008 等作業系統,是同時提供 64 與 32 位元的版本。



以下整理了幾個情境作為參考:

情境
可能的作法
1. 32 位元作業系統 + 記憶體 1 GB 考量:
設定 SQL Server 最大可以用記憶體小於 1 GB。
2. 32 位元作業系統 + 記憶體 2 GB 考量:
設定 SQL Server 最大可以用記憶體小於 2 GB。
約可用到 1.7 GB。
3. 32 位元作業系統 + 記憶體 4 GB 考量:
(1) 選項:可以考慮在作業系統檔案:Boot.ini,設定加入 /3GB,重新啟動作業系統來發揮作用。


(2) 設定 SQL Server 最大可以用記憶體小於 3 GB。
約可用到 2.7 GB。
4. 32 位元作業系統 + 記憶體 8 GB 考量:
(1) 在作業系統檔案:Boot.ini,設定使用 /PAE 參數,才能使用超過 4 GB 的記憶體。

(2) 選項:考慮在作業系統檔案:Boot.ini,設定加入 /3GB,重新啟動作業系統來發揮作用。


(3) 設定:啟用「鎖定記憶體分頁(Lock Pages in Memory)」選項: http://technet.microsoft.com/zh-tw/library/ms190730.aspx


(4) 設定 SQL Server 設定啟用 AWE ,組態最大可以用記憶體小於 7 GB。
5. 32 位元作業系統 + 記憶體 24 GB 考量:
(1) 在作業系統檔案:Boot.ini,設定使用 /PAE 參數,才能使用超過 4 GB 的記憶體。並確認作業系統檔案:Boot.ini 中沒有 /3GB 參數。

(2) 設定:啟用「鎖定記憶體分頁(Lock Pages in Memory)」選項:http://technet.microsoft.com/zh-tw/library/ms190730.aspx

(3) 設定 SQL Server 設定啟用 AWE ,組態最大可以用記憶體小於 22 GB。




認識 AWE(Address Windowing Extensions)

未來的 Microsoft SQL Server 版本將移除這項功能。
請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。

SQL Server 會使用 Microsoft Windows Address Windowing Extensions (AWE) API 支援超大容量的實體記憶體。

SQL Server 在 Microsoft Windows 2000 Server 和 Microsoft Windows Server 2003 上最多可以存取 64 GB 的記憶體。

只有在 SQL Server Enterprise、Standard 和 Developer Edition 中才支援 AWE,而且這項支援只適用於 32 位元版本的 SQL Server。Analysis Services 無法使用 AWE 對應的記憶體。

如果可用的實體記憶體低於使用者模式的虛擬位址空間,則無法啟用 AWE。

標準的 32 位元位址,最大可以對應 4 GB 的記憶體。因此會將 32 位元處理序的標準位址空間限制為 4 GB。

根據預設,在 32 位元 Microsoft Windows 作業系統上,會保留 2 GB 供作業系統使用,而另外 2 GB 則供應用程式使用。

如果您在 Windows 2000 Advanced Server 的 Boot.ini 檔中指定 /3gb 參數,則作業系統僅會保留 1 GB 的位址空間,而應用程式最多可以存取 3 GB。

AWE 是一組 Windows 記憶體管理功能的延伸,該功能允許應用程式配置 2-3 GB 以上、可透過標準 32 位元定址取得的記憶體。

AWE 能讓應用程式擷取實體記憶體,然後將非分頁記憶體的檢視,動態對應到 32 位元的位址空間。

雖然 32 位元的位址空間被限制為 4 GB,但非分頁記憶體可以設定成更大。

這讓大量使用記憶體的應用程式,例如大型資料庫系統,配置比 32 位元位址空間所能支援更多的記憶體。

設定作業系統使用 AWE 之前,請考慮下列項目:

(1) AWE 允許在 32 位元架構上配置超過 4 GB 的實體記憶體。應只有在可用的實體記憶體大於使用者模式虛擬位址空間時,才使用 AWE。

(2) 若要在 32 位元作業系統上支援超過 4 GB 的實體記憶體,則必須將 /pae 參數加入 Boot.ini 檔案中,然後重新啟動電腦。

(3) 如果電腦的可用實體記憶體超過 16 GB,作業系統需要 2 GB 的虛擬位址空間用於系統,因此只能支援 2 GB 的使用者模式虛擬位址空間。


請確定 Boot.ini 檔案中沒有 /3gb 參數,如此作業系統就能使用超過 16 GB 的記憶體。如果有的話,則該作業系統無法使用超過 16 GB 的實體記憶體。

--
SQL Server 緩衝集區可完全使用 AWE 對應記憶體,不過,只有資料庫頁面可以對 SQL Server 的虛擬位址空間動態產生對應與取消對應,並充分運用透過 AWE 所配置的記憶體。

AWE 不會直接支援永久存在於虛擬位址空間內的其他使用者、執行緒、資料庫、查詢和其他物件。

--
在 Microsoft SQL Server 2000 中啟用 AWE 記憶體雖然允許 SQL Server 使用超過 2 GB 或 /3 GB 限制的記憶體,但是額外的記憶體只能用來執行資料快取。
提供鎖定、快取程序計劃、使用者連線與資料指標使用的記憶體只能放在非 AWE 的記憶體區域。

在 SQL Server 2000 中啟用 AWE 記憶體的結果是:SQL Server 會在啟動處理時保留並認可記憶體,而不是根據需求動態地增加記憶體。

因而導致 SQL Server 保留住記憶體,一直到處理終止為止。這種記憶體也無法執行分頁作業。

-- 使用 SSMS 設定使用 AWE





-- 使用 T-SQL 設定使用 AWE

下列範例,顯示如何啟動 AWE,以及將 min server memory 設定為 1 GB 的限制並將 max server memory 設定為 6 GB。

--01 首先,請設定 AWE:
USE master
GO
sp_configure 'show advanced options', 1
RECONFIGURE
GO

sp_configure 'awe enabled', 1
RECONFIGURE
GO

--02 重新啟動 SQL Server 之後,下列訊息會寫入 SQL Server 錯誤記錄:「已啟用 Address Windowing Extensions」。

--03 
USE master
GO
sp_configure 'min server memory', 1024
RECONFIGURE
GO
sp_configure 'max server memory', 6144
RECONFIGURE
GO



認識「鎖定記憶體分頁(Lock Pages in Memory)」

此原則決定哪些帳戶可以使用處理序將資料保留在實體記憶體中,以防止系統將資料傳送到磁碟上的虛擬記憶體。

SQL Server 中的 [鎖定記憶體分頁] 選項預設會設為 OFF。

如果您具有系統管理員權限,則可使用「Windows 群組原則」工具 (gpedit.msc) 手動啟用此選項,並將此權限指派給執行 SQL Server 的帳戶。

雖然非必要,不過我們建議在使用 64 位元作業系統時在記憶體中鎖定分頁。

對於 32 位元作業系統,您必須先授與 Lock pages in memory 權限,再針對 SQL Server 設定 AWE。


建議:32 位元與 64 位元也是要設定 Lock pages in memory。


預設會停用 Windows 原則鎖定記憶體分頁選項。必須啟用這個權限,才可設定 Address Windowing Extensions (AWE)。

此原則決定哪些帳戶可以使用處理序將資料保留在實體記憶體中,以防止系統將資料傳送到磁碟上的虛擬記憶體。

在 32 位元作業系統上,如果在未使用 AWE 時設定這個權限,則會明顯降低系統效能。

64 位元作業系統不需要鎖定記憶體分頁。

請使用 Windows 群組原則工具 (gpedit.msc),以針對 SQL Server 所使用的帳戶啟用這個原則。
您必須是系統管理員,才可變更這個原則。


若要啟用鎖定記憶體分頁選項:

(1) 在 [開始] 功能表上,按一下 [執行]。在 [開啟舊檔] 方塊中,輸入 gpedit.msc。
此時會開啟 [群組原則] 對話方塊。

(2) 在 [群組原則] 主控台中,依序展開 [電腦設定] 和 [Windows 設定]。

(3) 展開 [安全性設定],然後展開 [本機原則]。

(4) 選取 [使用者權限指派] 資料夾。
這些原則會顯示在詳細資料窗格中。

(5)在窗格中連按兩下 [鎖定記憶體分頁]。

(6)在 [本機安全性原則設定] 對話方塊中按一下 [新增]。

(7)在 [選擇使用者或群組] 對話方塊中加入一個具有執行 sqlservr.exe 權限的帳戶。




認識 Boot.ini 的 PAE 與 3GB 參數

1. 認識 3GB 參數

單獨使用 /3GB 參數會配置 1 GB 核心空間,以及 3 GB 的使用者模式空間。

Windows Server 2003 提供啟動參數的支援,可讓您調整記憶體及記憶體位址空間的使用配置。

不管系統中的實體記憶體數量為何,Windows 32位元版本,都會使用 4 GB 的虛擬地址空間,其中 2 GB 配置給使用者模式處理程序 (例如,應用程式),而另外 2 GB 則配置給核心模式處理程序 (例如,作業系統及核心模式驅動程式)。

在擁有 1 GB 或更多實體記憶體的系統上,可以調整啟動參數可用來將較多的記憶體配置給應用程式 (3 GB),而配置給作業系統較少的記憶體 (1 GB)。

以下以 在 Windows Server 2003 中設定 /3GB 啟動參數為例:

1. 在 [我的電腦] 上按一下滑鼠右鍵,然後選取 [內容]。[系統內容] 對話方塊就會出現。

2. 按一下 [進階] 索引標籤。

3. 在 [啟動及修復] 區域中,按一下 [設定]。[啟動及修復] 對話方塊就會出現。

4. 在 [系統啟動] 區域中,按一下 [編輯]。這樣會以 [記事本] 開啟 Windows boot.ini 檔案。

5. 在 [Operating Systems] 區段中,在含有 /fastdetect 參數的啟動行結尾加上下列參數: /3GB

6. 儲存變更並關閉 [記事本]。

7. 按兩次 [確定] 關閉開啟的對話方塊,然後重新啟動電腦以使變更生效。

但有一個例外狀況,就是同時使用 /3GB 參數及 /PAE 參數的情況。
在這樣的情況下,作業系統不會使用超過 16 GB 的記憶體。


2. 認識 userva 參數

您可以使用 /userva=xxxx 參數,在 Windows Server 2003 系列中更精準地調整使用者與核心虛擬記憶體空間。

在 Boot.ini 檔中搭配 /3GB 參數使用這個新參數,即可將使用者模式空間調整成介於 2 與 3 GB 之間的值,而將其間的差異 (3,072 減去 xxxx) 傳回給核心模式。
請注意,xxxx 是以 MB 表示。

下面的範例 Boot.ini 檔說明如何使用新的參數調整電腦,以配置 2,900 MB 的使用者模式虛擬記憶體和 1,196 MB 的核心模式虛擬記憶體。

這樣會增加 172 MB 的可用核心空間:
[Boot Loader]
Timeout=30
Default=multi(0)disk(0)rdisk(0)partition(2)\WINNT
[Operating Systems]
multi(0)disk(0)rdisk(0)partition(2)\WINNT="Microsoft Windows Server 2003" /fastdetect /3GB /Userva=2900

--
userva=xxxx 參數的設計,讓需要 2 GB 以上使用者模式空間,但不需要單獨使用 /3GB 調整參數所提供之全部空間的程式製造商,可以更精準地調整使用者模式位址空間。

使用這個參數會減少下列系統集區中可用的記憶體:
(1) 未分頁集區
(2) 分頁集區
(3) System Page Table Entries (PTE)


3. 認識 PAE(Physical Address Extension)

PAE 是 IA32 處理器新增的功能,可以定址 4 GB 以上的實體記憶體。其記憶體的定址能力為2的36次方 (64GB)。

下列範例是已加入 PAE 參數的 Boot.ini 檔:
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(2)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Windows Server 2003, Enterprise" /fastdetect /PAE



參考資料:

如何設定 SQL Server 使用超過 2 GB 的實體記憶體
http://support.microsoft.com/kb/274750/zh-tw

Windows Server 2003 和 Windows 2000 提供大型記憶體支援
http://support.microsoft.com/kb/283037/zh-tw

如何搭配 /3GB 參數使用 /userva 參數,將使用者模式空間調整成介於 2 GB 與 3 GB 之間的值
http://support.microsoft.com/kb/316739/zh-tw

如何在 Windows 中設定 /3GB 啟動參數
http://technet.microsoft.com/zh-tw/library/bb124810(EXCHG.65).aspx

使用 / 3GB 切換在 Exchange Server 2003 Windows Server 2003 為基礎的系統上
http://support.microsoft.com/?kbid=823440

如何搭配 /3GB 參數使用 /userva 參數,將使用者模式空間調整成介於 2 GB 與 3 GB 之間的值
http://support.microsoft.com/kb/316739/zh-tw

4 GB RAM 調整功能與實體位址擴充參數的說明
http://support.microsoft.com/kb/291988/zh-tw

如何在 Windows Server 2003 中編輯 Boot.ini 檔案
http://support.microsoft.com/kb/317526

--
使用 AWE
http://technet.microsoft.com/zh-tw/library/ms175581.aspx

記憶體架構
http://technet.microsoft.com/zh-tw/library/ms187499.aspx

針對 4 GB 以上的實體記憶體啟用記憶體支援
http://technet.microsoft.com/zh-tw/library/ms179301.aspx

針對 SQL Server 啟用 AWE 記憶體
http://msdn.microsoft.com/zh-tw/library/ms190673.aspx

針對 SQL Server 啟用 AWE 記憶體 -- 2005 版本
http://msdn.microsoft.com/zh-tw/library/ms190673(v=sql.90).aspx

處理位址空間
http://msdn.microsoft.com/zh-tw/library/ms189334.aspx

管理大型資料庫的記憶體
http://technet.microsoft.com/zh-tw/library/ms191481.aspx

如何:啟用鎖定記憶體分頁選項 (Windows)
http://technet.microsoft.com/zh-tw/library/ms190730.aspx

沒有留言:

張貼留言