LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

服務器內存配置選項

liguoquan
2025年8月25日 10:25 本文熱度 57
:服務器內存配置選項


服務器內存配置選項

適用于:SQL Server

SQL Server 數據庫引擎的內存利用率由一對配置設置進行限制:“最小服務器內存(MB)”和“最大服務器內存(MB)”。 隨著時間的推移,在正常情況下,SQL Server 將嘗試申請內存,使其達到“最大服務器內存(MB)”設置的限制。

 備注

列存儲索引:概述In-Memory OLTP 概述和使用方案對象具有自己的內存管理器,因此可以更輕松地監視其緩沖池使用情況。 有關詳細信息,請參閱 sys.dm_os_memory_clerks

在較舊版本的 SQL Server 中,內存利用率幾乎未設上限,這向 SQL Server 指示所有系統內存均可供使用。 建議在所有版本的 SQL Server 中配置最大服務器內存 (MB)來配置 SQL Server 內存利用率上限。

  • 由于 SQL Server 2019 (15.x),Windows 服務器中的 SQL 安裝程序根據安裝時可用系統內存的百分比,為獨立 SQL Server 實例提供“最大服務器內存(MB)”的建議。
  • 隨時可通過“最小服務器內存(MB)”和“最大服務器內存(MB)”配置選項,為 SQL Server 實例使用的 SQL Server 進程重新配置內存邊界 (MB)。

 備注

本指南參考了 Windows 上的 SQL Server 實例。 若要了解 Linux 中的內存配置,請參閱針對 Linux 上的 SQL Server 的性能最佳做法和配置指南以及 memory.memorylimitmb 設置

建議

這些選項的默認設置和允許的最小值為:

選項默認允許的最小值建議
最小服務器內存 (MB)000
最大服務器內存 (MB)2,147,483,647 兆字節 (MB)128 MB75% 的可用系統內存未被其他進程(包括其他實例)占用。 有關更詳細的建議,請參閱最大服務器內存

在這些邊界內,SQL Server 可根據可用系統資源動態更改其內存要求。 有關詳細信息,請參閱動態內存管理

  • 將“最大服務器內存(MB)”值設置得太高可能導致一個 SQL Server 實例與同一主機上承載的其他 SQL Server 實例爭用內存。
  • 但是,將“最大服務器內存(MB)”設置得太低會降低性能,可能會導致 SQL Server 實例中出現內存壓力和性能問題。
  • 將“最大服務器內存(MB)”設置為最小值甚至可能導致無法啟動 SQL Server。 如果在更改此選項后無法啟動 SQL Server,請使用 -f 啟動選項來啟動它,并將“最大服務器內存(MB)”重置為其之前的值。 有關詳細信息,請參閱數據庫引擎服務啟動選項
  • 建議不要將“最大服務器內存(MB)”和“最小服務器內存(MB)”設置為相同值或接近相同的值。

 備注

最大服務器內存選項僅限制 SQL Server 緩沖池的大小。 最大服務器內存選項不限制 SQL Server 為分配其他組件(例如,擴展存儲過程、COM 對象、非共享 DLL 和 EXE)而保留的剩余未預留內存區域。

SQL Server 可動態使用內存。 但是,也可手動設置內存選項并限制 SQL Server 可訪問的內存量。 在設置 SQL Server 的內存量之前,請確定適當的內存設置,方法是從總物理內存中減去操作系統 (OS) 所需的內存(即不受“最大服務器內存(MB)”設置控制的內存分配)和任何其他 SQL Server 實例所需的內存(如果服務器上有其他使用內存的應用程序,包括其他 SQL Server 實例,則還要減去其他系統使用的內存量)。 這個差值就是可以分配給當前 SQL Server 實例使用的最大內存量。

在 SQL Server 的所有版本中,內存最大可配置為進程虛擬地址空間限制。 有關詳細信息,請參閱 Windows 和 Windows Server 版本的內存限制

最小服務器內存

使用“最小服務器內存(MB)”可保證可供 SQL Server 內存管理器使用的最小內存量。

  • SQL Server 不會在啟動時立即分配在“最小服務器內存(MB)”中指定的內存量。 不過,除非調低“最小服務器內存(MB)”的值,否則當內存使用量由于客戶端負載而達到該值后,SQL Server 不能釋放內存。 例如,在同一臺服務器上同時安裝多個 SQL Server 實例時,請考慮設置“最小服務器內存(MB)”參數,使其為實例預留內存。

  • 為了確保來自基礎主機的內存壓力不會嘗試從來賓虛擬機 (VM) 上的緩沖池釋放超過可接受性能所需的內存,在虛擬環境中設置“最小服務器內存(MB)”值非常有必要。 理想情況下,虛擬機中的 SQL Server 實例不必與虛擬主機主動內存解除分配進程競爭。

  • SQL Server 并不一定分配“最小服務器內存(MB)”中指定的內存量。 如果服務器上的負載從不需要分配“最小服務器內存(MB)”中指定的內存量,則 SQL Server 將使用更少的內存。

最大服務器內存

使用“最大服務器內存(MB)”保證 OS 和其他應用程序不會遇到來自 SQL Server 的不利內存壓力。

  • 在設置“最大服務器內存(MB)”配置之前,在正常操作期間監視托管 SQL Server 實例的服務器的總體內存消耗,以確定內存可用性和要求。 對于初始配置,或者當沒有機會收集一段時間內的 SQL Server 進程內存使用情況時,請使用以下通用最佳做法方法,為單個實例配置最大服務器內存 (MB)
    • 從總 OS 內存中減去“最大服務器內存(MB)”控制之外的潛在 SQL Server 線程內存分配量的同等值,這個量是堆棧大小1乘以計算出的最大工作線程數2
    • 然后減去在“最大服務器內存 (MB)”控制范圍外的其他內存分配的 25%,例如備份緩沖區、擴展存儲過程 DLL、使用自動化過程(sp_OA 調用)創建的對象以及來自鏈接服務器提供程序的分配。 這是一個通用近似值,實際情況可能會有所不同。
    • 對于單個實例設置,剩下的應該就是“最大服務器內存(MB)”設置。

1 有關每個體系結構的線程堆棧大小的信息,請參閱內存管理體系結構指南

2 有關當前主機中給定數量的綁定 CPU 的默認工作線程計算詳細信息,請參閱 服務器配置:最大工作線程

手動設置選項

可將“最小服務器內存(MB)”和“最大服務器內存(MB)”設置為跨一系列內存值。 在需要兼顧同一臺主機上運行的其他應用程序或其他 SQL Server 實例的內存要求時,此方法對于配置 SQL Server 實例的系統或數據庫管理員來說非常有用。

使用 Transact-SQL

“最小服務器內存(MB)”和“最大服務器內存(MB)”選項都是高級選項。 使用 sp_configure 系統存儲過程來更改這些設置時,只能在“顯示高級選項”設置為 1 時才能更改它們。 這些設置更改后會立即生效,不需要重新啟動服務器。 有關詳細信息,請參閱 sp_configure

以下示例將“最大服務器內存(MB)”選項設置為 12,288 MB (12 GB)。 雖然 sp_configure 將選項的名稱指定為 max server memory (MB),但你也可省略 (MB)

SQL
EXECUTE sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
EXECUTE sp_configure 'max server memory', 12288;
GO
RECONFIGURE;
GO

以下查詢返回當前配置的值和當前使用的值的相關信息。 無論是否已啟用“sp_configure”選項“顯示高級選項”,此查詢都將返回結果。

SQL
SELECT [name],
       [value],
       [value_in_use]
FROM sys.configurations
WHERE [name] = 'max server memory (MB)'
      OR [name] = 'min server memory (MB)';

使用 SQL Server Management Studio

使用“最小服務器內存(MB)”和“最大服務器內存(MB)”重新配置由 SQL Server 內存管理器為 SQL Server 實例管理的內存量 (MB)。

  1. 在對象資源管理器中,右鍵單擊服務器并選擇 “屬性” 。

  2. 選擇“服務器屬性”窗口的“內存”頁。 這會顯示最小服務器內存和最大服務器內存的當前值。

  3. 在“服務器內存”選項中,輸入最小服務器內存和最大服務器內存所需的數字。 相關建議,請參閱本文中的最小服務器內存 (MB) 和最大服務器內存 (MB)

下面的屏幕截圖演示了所有這三個步驟:

鎖定內存頁 (LPIM)

基于 Windows 的應用程序可使用 Windows 地址窗口擴展 (AWE) API 來分配物理內存并將其映射到進程地址空間。 LPIM Windows 策略將確定哪些帳戶可以訪問 API 以將數據保留在物理內存中,從而阻止系統將數據分頁到磁盤的虛擬內存中。 使用 AWE 分配的內存被鎖定,直到應用程序顯式釋放該內存或退出。 在 64 位 SQL Server 中使用 AWE API 進行內存管理也經常稱為鎖定頁。 鎖定內存中的頁可以在發生將內存分頁到磁盤時保持服務器的響應能力。 已向有權運行 的帳戶授予 Windows 鎖定內存頁 (LPIM) 用戶權限時,SQL Server Standard Edition 及更高版本的實例中已啟用“鎖定內存頁”選項。

若要對 SQL Server 禁用“鎖定內存頁”選項,請為有權運行 (SQL Server 啟動帳戶)啟動帳戶的帳戶刪除“鎖定內存頁”用戶權限。

使用 LPIM 可實現根據其他內存分配器的請求擴大或縮小內存,不影響 SQL Server 動態內存管理。 使用“鎖定內存頁”用戶權限時,強烈建議為最大服務器內存 (MB) 設置上限。 有關詳細信息,請參閱最大服務器內存 (MB)

僅應在有跡象表明正在換出 sqlservr 進程時使用 LPIM。在這種情況下,錯誤日志將報告錯誤 17890,類似于以下示例:

輸出
A significant part of sql server process memory has been paged out. This may result in a performance degradation. Duration: #### seconds. Working set (KB): ####, committed (KB): ####, memory utilization: ##%.

將 LPIM 與未考慮系統中其他內存消耗者的錯誤配置的最大服務器內存 (MB) 設置一起使用可能會導致不穩定,具體取決于其他進程所需的內存量,或超出最大服務器內存 (MB) 范圍的 SQL Server 內存要求。 有關詳細信息,請參閱最大服務器內存。 如果(在 32 位或 64 位系統上)授予了“鎖定內存頁”(LPIM) 權限,則強烈建議將“最大服務器內存(MB)”設置為特定值,而不是將默認值保留為 2,147,483,647 MB。

 備注

從 SQL Server 2012 (11.x) 開始,Standard Edition 不需要跟蹤標志 845來使用鎖定頁。

啟用“鎖定內存頁”

考慮上述信息后,若要通過向 SQL Server 實例的服務帳戶授予權限來啟用“鎖定內存頁”選項,請參閱啟用“鎖定內存頁”選項 (Windows)

若要確定 SQL Server 實例的服務帳戶,請參閱 SQL Server 配置管理器或在 service_account 中查詢 sys.dm_server_services。 有關詳細信息,請參閱 sys.dm_server_services

查看“鎖定內存頁”狀態

若要確定是否向 SQL Server 實例的服務帳戶授予“鎖定內存頁”權限,請使用以下查詢。 SQL Server 2016 (13.x) SP1 及更高版本支持此查詢。

SQL
SELECT sql_memory_model_desc FROM sys.dm_os_sys_info;

sql_memory_model_desc 的以下值指示 LPIM 的狀態:

  • CONVENTIONAL。 未授予“鎖定內存頁”權限。
  • LOCK_PAGES。 已授予“鎖定內存頁”權限。
  • LARGE_PAGES。 已在啟用了跟蹤標志 834 的企業模式中授予“鎖定內存頁”權限。 這是一種高級配置,不建議對大多數環境使用。 有關詳細信息和重要的注意事項,請參閱跟蹤標志 834

使用以下方法確定 SQL Server 實例是否正在使用鎖定頁:

  • 以下 Transact-SQL 查詢的輸出指示了 locked_page_allocations_kb 的非零值:

    SQL
    SELECT osn.node_id,
           osn.memory_node_id,
           osn.node_state_desc,
           omn.locked_page_allocations_kb
    FROM sys.dm_os_memory_nodes AS omn
         INNER JOIN sys.dm_os_nodes AS osn
             ON (omn.memory_node_id = osn.memory_node_id)
    WHERE osn.node_state_desc <> 'ONLINE DAC';
    
  • 當前 SQL Server 錯誤日志在服務器啟動期間 Using locked pages in the memory manager 報告消息。

  • DBCC MEMORYSTATUS 輸出的內存管理器部分將顯示 AWE Allocated 項的非零值。

SQL Server 的多個實例

當運行多個數據庫引擎實例時,可使用不同方法來管理內存:

  • 在每個實例中使用最大服務器內存 (MB) 來控制內存使用量,如上所述。 為每個實例建立最大設置,注意總的允許設置值不能大于計算機上的物理總內存。 可能需要為每個實例提供與預期的工作負荷或數據庫大小成正比的內存。 這種方法的優勢體現在:當啟動新的進程或實例時,可以立即為這些進程或實例提供可用內存。 這種方法的缺點為:如果沒有運行所有實例,則所有運行中的實例都無法使用剩余的可用內存。

  • 在每個實例中使用最小服務器內存 (MB) 來控制內存使用量,如上所述。 為每個實例建立最小設置,以使這些最小值的和比計算機上總的物理內存小 1-2 GB。 此外,可能需要建立與該實例的預期負荷成正比的最小值。 這種方法的優勢體現在:如果沒有同時運行所有實例,則運行中的實例可以使用剩余的可用內存。 當計算機上存在其他占用大量內存的進程時,這種方法也十分有用,因為它可確保 SQL Server 至少獲得合理的內存量。 這種方法的缺點是:當啟動新的實例(或任何其他進程)時,運行的實例可能會花費一些時間來釋放內存,如果實例必須將修改后的頁寫回到數據庫中來釋放內存,則花費的時間可能會更長。

  • 在每個實例中使用“最大服務器內存(MB)”和“最小服務器內存(MB)”來控制內存使用量,從而在廣泛的潛在內存利用率級別觀察和優化每個實例的最大利用率和最小內存保護范圍。

  • 不執行任何操作(不推薦)。 帶有工作負載的第一個實例通常分配所有的內存。 空閑實例或稍后啟動的實例最終可能會只使用最少的可用內存量運行。 SQL Server 不會嘗試均衡分配各個實例的內存使用量。 但是,所有實例均將響應 Windows 內存通知信號以調整它們內存需求量的大小。 Windows 不會使用內存通知 API 來平衡各個應用程序使用的內存。 它只提供有關系統內存可用性的全局反饋。

您可以在不重新啟動實例的情況下更改這些設置,以便可以輕松地進行嘗試以找到適合使用模式的最佳設置。

示例

答: 將最大服務器內存選項設置為 4 GB

以下示例將“最大服務器內存(MB)”選項設置為 4096 MB (4 GB)。 雖然 sp_configure 將選項的名稱指定為 max server memory (MB),但你也可省略 (MB)

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

這將輸出類似于 Configuration option 'max server memory (MB)' changed from 2147483647 to 4096. Run the RECONFIGURE statement to install. 的語句。新的內存限制在執行 RECONFIGURE 時立即生效。 有關詳細信息,請參閱 sp_configure

B. 確定當前內存分配

以下查詢返回有關當前分配內存的信息。

SQL
SELECT physical_memory_in_use_kb / 1024 AS sql_physical_memory_in_use_MB,
       large_page_allocations_kb / 1024 AS sql_large_page_allocations_MB,
       locked_page_allocations_kb / 1024 AS sql_locked_page_allocations_MB,
       virtual_address_space_reserved_kb / 1024 AS sql_VAS_reserved_MB,
       virtual_address_space_committed_kb / 1024 AS sql_VAS_committed_MB,
       virtual_address_space_available_kb / 1024 AS sql_VAS_available_MB,
       page_fault_count AS sql_page_fault_count,
       memory_utilization_percentage AS sql_memory_utilization_percentage,
       process_physical_memory_low AS sql_process_physical_memory_low,
       process_virtual_memory_low AS sql_process_virtual_memory_low
FROM sys.dm_os_process_memory;

C. 查看 max server memory (MB) 的值

以下查詢返回當前配置的值和正在使用的值的相關信息。 無論是否已啟用“sp_configure”選項“顯示高級選項”,此查詢都將返回結果。

SQL
SELECT [value], [value_in_use]
FROM sys.configurations
WHERE [name] = 'max server memory (MB)';
?

該文章在 2025/8/25 10:25:52 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
五月丁香合缴情在线看视频免费 | 中文字幕在笑第一页 | 婷婷四房综合激情五月在线 | 亚洲精品动漫卡通在线观看 | 视频一区二区三区四区在线综合网 | 在线亚洲欧美动漫一区二区 |