伺服器記憶體選項
使用 min server memory 與 max server memory 這兩個伺服器記憶體選項,來重新設定 MicrosoftSQL Server 的執行個體使用之緩衝集區裡的記憶體數量 (以 MB 為單位)。
依預設,SQL Server 可以根據可用的系統資源,動態變更其記憶體需求。min server memory 的預設值是 0,而 max server memory 的預設值是 2147483647。您可以為 max server memory 指定的最小記憶體數量是 16 MB。
[!附註]
將 max server memor 設定為最小值會大幅降低 SQL Server 效能,甚至阻止伺服器啟動。若您變更此選項後無法啟動 SQL Server,請使用 –f 啟動選項啟動它,並將 max server memory 重設為先前的值。如需詳細資訊,請參閱<使用 SQL Server 服務啟動選項>。
SQL Server 動態使用記憶體時,會定期查詢系統以判定可用的實際記憶體量。在 MicrosoftWindows 2000 下,SQL Server 會增加或縮減緩衝區快取,根據伺服器的活動將可用的實體記憶體保持在 4 MB 與 10 MB 之間。維持這個可用記憶體數量可避免 Windows 2000 進行分頁。如果可用記憶體少於這個數量,SQL Server 會將記憶體釋出給 Windows 2000。如果可用記憶體多於這個數量,SQL Server 會將記憶體配置給緩衝集區。只有當 SQL Server 的工作負載需要更多的記憶體時,它才會在緩衝集區中增加記憶體,休息中的伺服器不會增加其緩衝集區的大小。
在 Windows Server 2003 下,SQL Server 會使用記憶體通知 API QueryMemoryResourceNotification,判定緩衝集區何時要配置記憶體和釋放記憶體。
建議允許 SQL Server 動態使用記憶體;不過,您可以手動設定記憶體選項和限制 SQL Server 可存取的記憶體數量。在您設定 SQL Server 的記憶體數量之前,要先決定適當的記憶體設定,請將實體記憶體總數減去 Windows 2000 或 Windows Server 2003 以及任何其他 SQL Server 執行個體 (以及當電腦不專用於 SQL Server 時,其他的系統用途) 需要的記憶體。這個差額是可指派給 SQL Server 的最大記憶體數量。
手動設定記憶體選項
手動設定 SQL Server 記憶體選項時,有兩個主要的方法:
第一種方法是將 min server memory 與 max server memory 設成同一個值。達到值之後,此值與配置給 SQL Server 緩衝集區的固定記憶體數量相符。
第二種方法是將 min server memory 與 max server memory 設成跨越某個範圍的記憶體值。這樣的作法有助於讓系統或資料庫管理員,將 SQL Server 執行個體配合同一部電腦上執行之其他應用程式的記憶體需求一起設定。
使用 min server memory 可確保 SQL Server 執行個體的緩衝集區有最小記憶體數量可用。SQL Server 啟動時不會立即配置 min server memory 中指定的記憶體數量。不過,由於用戶端負載使記憶體使用量達到這個值後,除非降低 min server memory 的值,否則 SQL Server 無法從配置的緩衝集區釋出記憶體。
[!附註]
SQL Server 不保證能夠配置 min server memory 中指定的記憶體數量。如果伺服器的負載從不需要配置 min server memory 中指定的記憶體大小,則 SQL Server 會以較少的記憶體執行。
使用 max server memory 來避免 SQL Server 緩衝集區使用超過指定的記憶體數量,以保留剩餘的記憶體供其他應用程式使用。SQL Server 啟動時不會立即配 max server memory 中指定的記憶體數量。記憶體使用量會隨著 SQL Server 的需求而增加,最高為 max server memory 中指定的值。除非您提高 max server memory 的值,否則 SQL Server 無法超過這個記憶體使用量。
在減少 max server memory 值之前,請使用效能監視器來檢查負載下的 SQLServer:Buffer Manager 效能物件,並記下 Stolen pages 和 Reserved pages 計數器的目前值。這些計數器以 8K 頁數來報告記憶體數量。max server memory 應該設定為高於這兩個值的總和,以避免記憶體不足的錯誤。最低合理 max server memory 設定 (以 MB 為單位) 的近似值是 ([Stolen pages] + [Reserved pages])/ 100。若要減少 max server memory,您可能必須重新啟動 SQL Server 來釋放記憶體。如需有關如何設定記憶體選項的詳細資訊,請參閱<如何:設定固定的記體數量 (SQL Server Management Studio)>。
網路應用程式的資料輸送量最大化
若要最佳化 SQL Server 的系統記憶體使用量,您應該限制系統用於檔案快取的記憶體數量。若要限制檔案系統快取,請確定沒有選取 [檔案共用的資料輸送量最大化]。您可以選取 [記憶體使用最小化] 或 [平衡],藉以指定最小的檔案系統快取。
若要檢查作業系統的現有設定
按一下 [開始],再按一下 [控制台],然後按兩下 [網路連線],再按兩下 [區域連線]。
在 [一般] 索引標籤上按一下 [內容],選取 [File and Printer Sharing Microsoft Networks],然後按一下 [內容]。
如果已選取 [網路應用程式的資料輸送量最大化],請選擇其他任何選項,按一下 [確定],然後關閉其餘的對話方塊。
Windows Server 2003 下的 AWE 記憶體
在 Windows Server 2003 下,SQL Server 可以使用 Address Windowing Extensions (AWE) 記憶體,進一步協助負載平衡自己與作業系統的記憶體需求。SQL Server 與作業系統間的負載平衡,受到 min server memory 與 max server memory 選項的條件約束限制。如果伺服器硬體支援 Hot-Add Memory,則可以視需要將額外的實體記憶體加入伺服器,而無須重新啟動。如需有關 awe enabled 組態選項的詳細資訊,請參閱<awe enabled 選項>。如需詳細資訊,請參閱<熱新增記憶體>。
[!附註]
在 Windows Server 2003 下,若實體記憶體少於已設定的虛擬記憶體限制,伺服器上仍可支援動態 AWE 記憶體。Windows 2000 需要可用的實體記憶體超過虛擬記憶體,才能啟用 AWE 記憶體。
理論上,最好能為 SQL Server 盡可能多配置一些記憶體,而又不會造成系統與磁碟交換分頁。臨界值會因系統而異。例如,在專門用於 SQL Server 的 32 GB 系統上,SQL Server 適當的最大臨界值可能為 30-31 GB;在 64-GB 系統上,適當的臨界值可能為 60-62 GB。
[!附註]
在增加 SQL Server 記憶體的數量時,應確定有足夠的磁碟空間可供擴充作業系統的虛擬記憶體支援檔 (Pagefile.sys),以容納其他記憶體。如需有關虛擬記憶體支援檔案的詳細資訊,請參閱 Windows 2000 或 Windows Server 2003 文件集。
使用「Windows 系統監視器」的統計資料,可協助您視需要調整記憶體值。只有新增或移除記憶體時,或是變更系統的用途時,才應該變更這個值。
虛擬記憶體管理員
類似 Windows 2000 與 Windows Server 2003 的 32 位元作業系統,就可以存取 4 GB 的虛擬位址空間。2 GB 以下的虛擬記憶體專供各個處理序使用,而且可供應用程式使用。2 GB 以上則保留供作業系統使用。從 MicrosoftWindows XP Professional 和更新版本 (包括 Windows Server 2003) 開始的所有作業系統版本,都包括可提供應用程式存取 3 GB 虛擬記憶體的 boot.ini 參數,將作業系統限制成 1 GB。如需有關如何使用 /3GB 參數記憶體組態的詳細資訊,請參閱 Windows 文件集。
[!附註]
在 Windows Server 2003 中,只有當伺服器使用熱新增記憶體裝置時,才會自動啟用 PAE。在此情況下,您不必在已設定為使用熱新增記憶體裝置的系統上使用 /PAE 參數。但是在所有其他情況下,您就必須在 Boot.ini 檔案中使用 /PAE 參數,才能利用大於 4 GB 的記憶體。
4-GB 的位址空間由「Windows 虛擬記憶體管理員 (VMM)」對應到可用的實體記憶體。在 Windows Server 2003 作業系統引進之後,已增加了可支援的實體記憶體數量。實體記憶體可由 AWE 存取,因此根據您使用的作業系統:
Windows Server 2003 Standard Edition 最高支援 4 GB 的實體記憶體。
Windows Server 2003 Enterprise Edition 最高支援 32 GB 的實體記憶體。
Windows Server 2003 Datacenter Edition 最高支援 64 GB 的實體記憶體。
如 SQL Server 的 Win32 應用程式只知道虛擬或邏輯位址,而不知道實體位址。在任何時間,應用程式可用的實體記憶體大小 (工作集) 由可用的實體記憶體與 VMM 決定。應用程式無法直接控制何時駐留在記憶體中。
Windows 2000 Advanced Server 與 Windows 2000 Datacenter Server,以及 Windows Server 2003 Enterprise Server 與 Windows Server 2003 Datacenter Server 32 位元版本在使用 Intel Physical Addressing Extensions (PAE) 時,就能夠超過 4 GB 的限制。在 Windows boot.ini 組態檔中使用 /PAE 參數,即可存取超過 4 GB 限制的實體記憶體。這是讓 AWE 記憶體存取 4 GB 以上記憶體的必要條件。如需有關如何在 Windows 2000 和 Windows Server 2003 中使用這個記憶體組態的詳細資訊,請參閱 Windows 文件集。
虛擬位址系統 (如 Windows 2000 或 Windows Server 2003) 可允許超額認可實體記憶體,因此虛擬記憶體與實體記憶體的比率可超過 1:1。因此,大型程式可以在各種實體記憶體組態的電腦上執行。然而,使用的虛擬記憶體若遠大於所有處理序的平均工作集組合,可能會導致效能降低。
min server memory 與 max server memory 選項屬於進階選項。如果您要使用 sp_configure 系統預存程序來變更這些設定,只有當 show advanced options 設為 1 時,才能變更它們。這些設定會立即生效,不需要重新啟動伺服器。
執行 SQL Server 的多個執行個體
當您執行 Database Engine 的多個執行個體時,您有三個方式可以用來管理記憶體:
使用 max server memory 來控制記憶體使用量。建立每一個執行個體的最大設定值,注意,扣除總額不大於機器的總實體記憶體。您想要提供與執行個體的預期工作負載或資料庫大小成比例的記憶體給每一個執行個體。此方式的優點是當新的處理序或執行個體啟動時,立刻有記憶體可用。缺點是,如果您不是執行所有執行個體,則任何執行中執行個體都不能利用剩餘可用的記憶體。
使用 min server memory 來控制記憶體使用量。建立每一個執行個體的最小設定值,使這些最小值的總和小於機器的總實體記憶體 1-2 GB。同樣地,您可以建立與該執行個體的預期負載成比例的最小值。此方式的優點是,若沒有同時執行所有執行個體,則執行的執行個體可使用剩餘可用的記憶體。當電腦上有另一個記憶體密集處理序時,此方法也很有用,因為它可確保 SQL Server 至少取得合理的記憶體數量。其缺點是,當新的執行個體 (或任何其他處理序) 啟動時,執行中的執行個體可能需要花一些時間來釋出記憶體,尤其如果它們必須將已修改的頁面寫回其資料庫才能這麼做的話。您也需要大幅增加分頁檔案的大小。
不執行任何動作 (不建議)。有呈現工作負載的前幾個執行個體傾向於配置所有記憶體。閒置執行個體或稍後啟動的執行個體最後可能只剩少量的記憶體可用。SQL Server 不會嘗試在執行個體之間平衡記憶體使用量。不過,所有執行個體將回應 Windows 記憶體通知訊號,來調整其緩衝區集區的大小。從 Windows Server 2003 SP1 開始,Windows 不會平衡具有記憶體通知 API 的應用程式之間的記憶體。它只提供對系統上記憶體可用性的全域回應。
您可以變更這些設定,而不必重新啟動執行個體,因此,您可以輕易體驗來尋找使用模式的最佳設定。
範例
下列範例會將 max server memory 選項設定為 4 GB:
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'max server memory', 4096;
GO
RECONFIGURE;
GO