使用兩個伺服器記憶體選項 ,最小伺服器記憶體 和 最大伺服器記憶體,針對 SQL Server 實例所使用的 SQL Server 進程,重新設定 SQL Server 記憶體管理員所管理的記憶體數量(以 MB 為單位)。
最小伺服器記憶體的預設設定為 0,最大伺服器記憶體的預設設定為 2147483647 MB。 根據預設,SQL Server 可以根據可用的系統資源動態變更其記憶體需求。
備註
將 最大伺服器記憶體 設定為最小值可能會嚴重降低 SQL Server 效能,甚至防止其啟動。 如果您在變更此選項之後無法啟動 SQL Server,請使用 -f 啟動選項加以啟動,並將 最大伺服器記憶體 重設為其先前的值。 如需詳細資訊,請參閱 Database Engine 服務啟動選項。
當 SQL Server 動態使用記憶體時,它會定期查詢系統,以判斷可用記憶體的數量。 保持此可用記憶體可避免作業系統進行分頁。 如果記憶體不足,SQL Server 會將記憶體釋放至OS。 如果有更多記憶體可用,SQL Server 可能會配置更多記憶體。 只有在 SQL Server 的工作負載需要更多記憶體時,才會新增記憶體;待用伺服器不會增加其虛擬位址空間的大小。
如需傳回目前使用記憶體的查詢,請參閱範例 B。 max 伺服器記憶體 會控制 SQL Server 的記憶體分配,包括緩衝池、編譯記憶體、所有快取、qe 記憶體授予、鎖管理員記憶體和 clr 記憶體(基本上就是 sys.dm_os_memory_clerks 中的任何記憶體管理員)。 線程堆疊的記憶體、記憶體堆積、SQL Server 以外的鏈接伺服器提供者,以及非 SQL Server DLL 配置的任何記憶體,均不受伺服器記憶體上限所控制。
SQL Server 會使用記憶體通知 API QueryMemoryResourceNotification 來判斷 SQL Server 記憶體管理員何時可以配置記憶體和釋放記憶體。
建議使用 SQL Server 動態使用記憶體;不過,您可以手動設定記憶體選項,並限制 SQL Server 可以存取的記憶體數量。 在設定 SQL Server 的記憶體數量之前,先決定適當的記憶體設定方法。將 OS 和 SQL Server 的任何其他實例(如果電腦並非完全專用於 SQL Server,則包括其他系統使用)的所需記憶體從物理記憶體總計中減去。 此差異是您可以指派給 SQL Server 的記憶體數量上限。
手動設定記憶體選項
伺服器選項 最小伺服器記憶體 和 最大伺服器記憶體 可以設定為跨越一系列記憶體值。 這個方法適用於系統或資料庫管理員,以搭配其他應用程式或其他在相同主機上執行的 SQL Server 實例的記憶體需求來設定 SQL Server 實例。
備註
最小伺服器記憶體和最大伺服器記憶體選項是進階選項。 如果您使用 sp_configure 系統預存程式來變更這些設定,則只有在 顯示進階選項 設定為 1 時,才能變更這些設定。 這些設定會在不重新啟動伺服器的情況下立即生效。
使用 min_server_memory 保證 SQL Server 實例的 SQL Server 記憶體管理員可用的記憶體數量下限。 在啟動時,SQL Server 不會立即配置指定在 最小伺服器記憶體 中的記憶體數量。 不過,當記憶體使用量因為用戶端負載而達到此值之後,除非 減少最小伺服器記憶體 的值,否則 SQL Server 無法釋放記憶體。 例如,當數個 SQL Server 實例可以同時存在於相同的主機時,請設定 min_server_memory 參數,而不是max_server_memory,以便保留實例的記憶體。 此外,在虛擬化環境中設定 min_server_memory 值是不可或缺的,以確保基礎主機的記憶體壓力不會從客體 SQL Server 虛擬機(VM)上的緩衝池(Buffer Pool)中釋放超過可接受效能所需的記憶體。
備註
SQL Server 不保證會配置 最小伺服器記憶體中指定的記憶體數量。 如果伺服器上的負載絕對不需要配置 最小伺服器記憶體中指定的記憶體數量,SQL Server 將會以較少的記憶體執行。
使用 max_server_memory 來保證OS不會遇到有害的記憶體壓力。 若要設定最大伺服器記憶體組態,請監視 SQL Server 進程的整體耗用量,以判斷記憶體需求。 若要更精確地計算單一實例:
- 從OS記憶體總計,將1GB-4GB保留給OS本身。
- 然後減去在 最大伺服器記憶體 控制之外的潛在 SQL Server 記憶體配置的相應部分,這些配置包括 堆疊大小 1 * 計算的最大工作線程 2 + -g 啟動參數 3(如果未設定 -g 則預設為 256MB)。 剩下的應該是為單一實例設置的 max_server_memory 的參數。
1 如需每個架構線程堆疊大小的相關信息,請參閱 記憶體管理架構指南 。
2 如需計算目前主機內指定數目 CPU 的預設工作線程數目之資訊,請參閱文件頁面了解如何設定伺服器組態選項中的 最大工作線程配置。
3 如需 -g 啟動參數的相關信息,請參閱Database Engine服務啟動選項上的文件頁面。 僅適用於 32 位 SQL Server(SQL Server 2005 到 SQL Server 2014)。
| OS 類型 | 允許用於最大伺服器記憶體的最小記憶體數量 |
|---|---|
| 32 位元 | 64 MB |
| 64 位元 | 128 MB |
如何使用 SQL Server Management Studio 設定記憶體選項
使用兩個伺服器記憶體選項 ,最小伺服器記憶體 和 最大伺服器記憶體,針對SQL Server 實例重新設定 SQL Server 記憶體管理員所管理的記憶體數量(以 MB 為單位)。 根據預設,SQL Server 可以根據可用的系統資源動態變更其記憶體需求。
設定固定記憶體數量的程式
若要設定固定數量的記憶體:
在物件總管中,請以滑鼠右鍵按一下伺服器,然後選取 [屬性]。
按一下 [記憶體] 節點。
在 [伺服器記憶體選項] 下,輸入 [ 最小伺服器記憶體 ] 和 [ 伺服器記憶體上限] 所需的數量。
使用預設設定,允許 SQL Server 根據可用的系統資源動態變更其記憶體需求。 最小伺服器記憶體的預設設定為 0,而最大伺服器記憶體的預設設定為 2147483647 MB。
將網路應用程式的數據輸送量最大化
若要將 SQL Server 的系統記憶體使用量優化,您應該限制系統用於檔案快取的記憶體數量。 若要限制檔系統快取,請確定未選取 [最大化檔案共享的數據輸送量 ]。 您可以選取 [ 最小化使用的記憶體 ] 或 [ 平衡],以指定最小的文件系統快取。
檢查在操作系統上的目前設定
按兩下 [開始],按兩下 [ 控制面板],按兩下 [ 網络連線],然後按兩下 [ 局域網路連線]。
在 [ 一般 ] 索引標籤上,按兩下 [ 屬性],選取 [ 檔案和印表機共用Microsoft網络],然後按兩下 [ 內容]。
如果選取 [將網络應用程式的數據輸送量最大化 ],請選擇任何其他選項,按兩下 [ 確定],然後關閉其餘的對話框。
鎖定記憶體中的頁面
此 Windows 原則決定哪些帳戶可以使用處理序將資料保留在實體記憶體中,以防止系統將資料傳送到磁碟上的虛擬記憶體。 在記憶體中鎖定頁面可能會讓伺服器在將記憶體分頁至磁碟時保持回應。 當具有執行 sqlservr.exe 權限的帳戶被授予 Windows「記憶體中鎖定頁面」(LPIM)使用者權限時,SQL Server 2014 Standard Edition 及更高版本中 32 位元和 64 位元實例的 SQL Server 鎖定頁面於記憶體 選項會被設定為 ON。 在舊版的 SQL Server 中,設定 32 位 SQL Server 實例的 [鎖定頁面] 選項,會要求具有許可權執行 sqlservr.exe 的帳戶具有 LPIM 用戶權力,且 [awe_enabled] 組態選項設定為 ON。
若要停用 SQL Server 的 鎖定記憶體中的頁面 選項,請移除 SQL Server 啟動帳戶的 [鎖定記憶體中的頁面] 使用者權限。
停用記憶體中的鎖定頁功能
若要停用記憶體中的鎖定頁面選項:
在 [開始] 功能表上,按一下 [執行] 。 在 [開啟] 方塊中輸入
gpedit.msc。[群組原則] 對話方塊開啟。
在組策略控制台中,展開計算機配置,然後展開Windows 設定。
展開 [安全性設定],然後展開 [ 本機原則]。
選取 [使用者權限指派] 資料夾。
這些原則會顯示在詳細資料窗格中。
在窗格中,按兩下 [ 鎖定記憶體中的頁面]。
在 [ 本機安全策略設定 ] 對話框中,選取具有執行 sqlservr.exe 許可權的帳戶,然後按兩下 [ 移除]。
虛擬記憶體管理系統
32 位作系統可讓您存取 4 GB 的虛擬位址空間。 每個程序都有 2 GB 的虛擬記憶體,並且這些記憶體屬於程序的私人空間,可供應用程式使用。 2 GB 保留給作系統使用。 所有作系統版本都包含一個參數,可讓應用程式存取最多 3 GB 的虛擬位址空間,將作系統限制為 1 GB。 如需了解更多關於切換記憶體配置的資訊,請參閱有關 4GB 微調 (4GT) 的 Windows 文件。 當 32 位 SQL Server 在 64 位作系統上執行時,其使用者可用的虛擬位址空間會是完整的 4 GB。
地址空間的認可區域會由 Windows 虛擬記憶體管理員 (VMM) 對應至可用的物理記憶體。
如需不同作系統所支援之物理記憶體數量的詳細資訊,請參閱 Windows 檔
虛擬記憶體系統允許物理記憶體過度投入,讓虛擬記憶體與物理記憶體的比例可以超過 1:1。 因此,較大的程式可以在具有各種物理記憶體組態的計算機上執行。 不過,使用比所有進程之合併平均工作集還多得多的虛擬記憶體,可能會導致效能不佳。
最小伺服器記憶體和最大伺服器記憶體選項是進階選項。 如果您使用 sp_configure 系統預存程式來變更這些設定,則只有在 顯示進階選項 設定為 1 時,才能變更這些設定。 這些設定會在不重新啟動伺服器的情況下立即生效。
執行多個 SQL Server 實例
當您執行多個 Database Engine 實例時,有三種方法可用來管理記憶體:
使用 最大伺服器記憶體 來控制記憶體使用量。 為每個實例建立最大設定,請小心總額度不超過您計算機上的物理記憶體總數。 您可能想要為每個實體記憶體提供與其預期工作負載或資料庫大小成正比的記憶體。 這種方法的優點是,當新的進程或實例啟動時,可用記憶體將立即可供它們使用。 缺點是,如果您未執行所有實例,則任何執行中的實例都無法利用剩餘的可用記憶體。
使用 最小伺服器記憶體 來控制記憶體使用量。 為每個實例建立最小設定,讓這些最小值的總和小於您計算機上的物理記憶體總數 1-2 GB。 同樣地,您可以根據該實例的預期負載,建立這些最小值。 這種方法的優點是,如果並非所有實例同時執行,則執行中的實例可以使用剩餘的可用記憶體。 當計算機上有另一個耗用記憶體的程式時,此方法也很有用,因為它可確保 SQL Server 至少會取得合理的記憶體數量。 缺點是,當新的實例(或任何其他進程)啟動時,執行中的實例可能需要一些時間才能釋放記憶體,特別是如果他們必須將修改過的頁面寫回資料庫,才能這麼做。
不執行任何動作(不建議)。 首個具有工作負載的實例通常會分配所有的記憶體。 閒置的實例或較晚啟動的實例,最終可能只剩下最少的可用記憶體。 SQL Server 不會嘗試平衡實例之間的記憶體使用量。 不過,所有實例都會回應 Windows 記憶體通知訊號,以調整其記憶體使用量的大小。 Windows 不會使用記憶體通知 API 來平衡應用程式之間的記憶體。 它只會針對系統上記憶體的可用性提供全域意見反應。
您可以變更這些設定,而不需要重新啟動實例,以便輕鬆地實驗以找出最佳使用模式的設定。
將記憶體數量上限提供給 SQL Server
| 32 位元 | 64 位元 | |
|---|---|---|
| 傳統記憶體 | 所有 SQL Server 版本中最多處理虛擬位址空間限制: 2 GB 3 GB,使用/3gb 開機參數* WOW64 上的 4 GB** |
所有 SQL Server 版本中最多處理虛擬位址空間限制: x64 架構上的 8 TB |
* /3gb 是作系統開機參數。 如需詳細資訊,請流覽 MSDN 連結庫。
**WOW64 (Windows on Windows 64) 是 32 位 SQL Server 在 64 位作系統上執行的模式。 如需詳細資訊,請流覽 MSDN 連結庫。
範例
範例 A
下列範例會將 max server memory 選項設定為 4 GB:
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'max server memory', 4096;
GO
RECONFIGURE;
GO
範例 B. 判斷目前的記憶體配置
以下查詢會傳回目前配置之記憶體的相關資訊。
SELECT
(physical_memory_in_use_kb/1024) AS Memory_usedby_Sqlserver_MB,
(locked_page_allocations_kb/1024) AS Locked_pages_used_Sqlserver_MB,
(total_virtual_address_space_kb/1024) AS Total_VAS_in_MB,
process_physical_memory_low,
process_virtual_memory_low
FROM sys.dm_os_process_memory;
另請參閱
效能的監視與微調
RECONFIGURE (Transact-SQL)
伺服器組態選項 (SQL Server)
sp_configure (Transact-SQL)