伺服器記憶體選項

您可以使用 min server memorymax server memory 這兩個伺服器記憶體選項來重新設定 Microsoft SQL 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 以動態方式使用記憶體時,它會定期查詢系統以判斷可用的實體記憶體數量。SQL Server 會使用記憶體通知 API QueryMemoryResourceNotification 來判斷緩衝集區可配置記憶體和釋出記憶體的時間。

建議允許 SQL Server 動態使用記憶體;不過,您可以手動設定記憶體選項和限制 SQL Server 可存取的記憶體數量。在您設定 SQL Server 的記憶體數量之前,請將實體記憶體總數減去作業系統以及任何其他 SQL Server 執行個體 (以及當電腦不專用於 SQL Server 時,其他的系統用途) 需要的記憶體,藉以決定適當的記憶體設定。這個差額是可指派給 SQL Server 的最大記憶體數量。

手動設定記憶體選項

您可以將 min server memorymax 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 pagesReserved 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 的系統記憶體使用量,您應該限制系統用於檔案快取的記憶體數量。若要限制檔案系統快取,請確定沒有選取 [檔案共用的資料輸送量最大化]。您可以選取 [記憶體使用最小化][平衡],藉以指定最小的檔案系統快取。

若要檢查作業系統的現有設定

  1. 按一下 [開始],再按一下 [控制台],然後按兩下 [網路連線],再按兩下 [區域連線]

  2. [一般] 索引標籤上按一下 [內容],選取 [File and Printer Sharing Microsoft Networks],然後按一下 [內容]

  3. 如果已選取 [網路應用程式的資料輸送量最大化],請選擇其他任何選項,按一下 [確定],然後關閉其餘的對話方塊。

Windows Server 2003 下的 AWE 記憶體

在 Windows Server 2003 下,SQL Server 可以使用 Address Windowing Extensions (AWE) 記憶體,進一步協助負載平衡自己與作業系統的記憶體需求。SQL Server 與作業系統間的負載平衡,受到 min server memorymax server memory 選項的條件約束限制。如果伺服器硬體支援 Hot-Add Memory,則可以視需要將額外的實體記憶體加入伺服器,而無須重新啟動。如需有關 awe enabled 組態選項的詳細資訊,請參閱<awe enabled 選項>。如需詳細資訊,請參閱<熱新增記憶體>。

[!附註]

若實體記憶體少於已設定的虛擬記憶體限制,伺服器仍可支援動態 AWE 記憶體。

理論上,最好能為 SQL Server 盡可能多配置一些記憶體,而又不會造成系統與磁碟交換分頁。臨界值會因系統而異。例如,在專門用於 SQL Server 的 32 GB 系統上,SQL Server 適當的最大臨界值可能為 30-31 GB;在 64-GB 系統上,適當的臨界值可能為 60-62 GB。

[!附註]

在增加 SQL Server 記憶體的數量時,應確定有足夠的磁碟空間可供擴充作業系統的虛擬記憶體支援檔 (Pagefile.sys),以容納其他記憶體。如需有關虛擬記憶體支援檔案的詳細資訊,請參閱 Windows 文件集。

使用 Windows 系統監視器的統計資料,可協助您視需要調整記憶體值。只有新增或移除記憶體時,或是變更系統的用途時,才應該變更這個值。

虛擬記憶體管理員

32 位元作業系統可讓您存取 4 GB 的虛擬位址空間。其中 2 GB 的虛擬記憶體專供各個處理序使用,而且可供應用程式使用。另外 2 GB 則保留給作業系統使用。所有作業系統版本都包括可讓應用程式存取最多 3 GB 虛擬記憶體的參數,並將作業系統限制成 1 GB。如需有關如何使用此參數記憶體組態的詳細資訊,請參閱有關 4 GB 微調 (4GT) 的 Windows 文件集。當 32 位元 SQL Server 在 64 位元作業系統上執行時,其使用者可用的虛擬位址空間為完整的 4 GB。

[!附註]

只有當伺服器使用熱新增記憶體裝置時,才會自動啟用 PAE。在此情況下,您不必在已設定為使用熱新增記憶體裝置的系統上使用 /PAE 參數。但是在所有其他情況下,您就必須在 Boot.ini 檔案中使用 /PAE 參數,才能利用大於 4 GB 的記憶體。

4-GB 的位址空間由 Windows 虛擬記憶體管理員 (VMM) 對應到可用的實體記憶體。因此,AWE 可存取的實體記憶體視您使用的作業系統而定。如需有關不同作業系統所支援之實體記憶體數量的詳細資訊,請參閱 Windows 文件集:<Windows 版本的記憶體限制>。

虛擬位址系統可允許超額認可實體記憶體,因此虛擬記憶體與實體記憶體的比率可超過 1:1。因此,大型程式可以在各種實體記憶體組態的電腦上執行。然而,使用的虛擬記憶體若遠大於所有處理序的平均工作集組合,可能會導致效能降低。

min server memorymax 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 不會使用記憶體通知 API 來平衡應用程式之間的記憶體。它只提供對系統上記憶體可用性的全域回應。

您可以變更這些設定,而不必重新啟動執行個體,因此,您可以輕易體驗來尋找使用模式的最佳設定。

範例

下列範例會將 max server memory 選項設定為 4 GB:

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'max server memory', 4096;
GO
RECONFIGURE;
GO