分享方式:


MSSQLSERVER_17890

適用於:SQL Server

詳細資料

屬性
產品名稱 SQL Server
事件識別碼 17890
事件來源 MSSQLSERVER
元件 SQLEngine
符號名稱 SRV_WS_TRIMMED
訊息文字 SQL Server 進程記憶體的一個重要部分已分頁。這可能會導致效能降低。 持續時間: %d 秒, 工作集 (KB): %I64d,已認可 (KB): %I64d,記憶體使用情形: %d%%。

說明

您可能會在 SQL Server 錯誤記錄檔或 Windows 應用程式事件記錄檔中遇到下列錯誤訊息。

SQL Server 進程記憶體的一個重要部分已分頁。這可能會導致效能降低。 持續時間:0 秒。 工作集 (KB):3383250,已認可(KB):9112480,記憶體使用率:37%。

您可能也會注意到查詢執行和 SQL Server 上所有其他作業的突然效能降低。

原因

SQL Server 會監視 SQL Server 進程的各種記憶體相關信息。 在此情況下,它偵測到進程的工作集小於認可的進程記憶體的 50%。 因此會列印此警告。 此警告的正常原因如下:

  • 操作系統會將大部分的 SQL Server 認可記憶體分頁到分頁檔案。
  • 這可能是因為其他應用程式或操作系統需求的記憶體需求突然增加。
  • 當某些設備驅動器要求連續記憶體配置以符合其需求時,也可能會發生此情況。

使用者動作

您可以鎖定為實體記憶體中緩衝池配置的記憶體,以防止 Windows 作業系統分頁 SQL Server 進程的緩衝池記憶體。 您可以將鎖定記憶體中的分頁指派給做為 SQL Server 服務的啟動帳戶的用戶帳戶,以鎖定記憶體。 但在實作此解決方案之前,請先檢閱導致 SQL Server 記憶體分頁和重要考慮幾節,再指派 SQL Server 實例的「鎖定記憶體中的分頁」用戶權力

注意

使用鎖定記憶體中的分頁可確保 SQL Server 所管理的記憶體不會分頁。不過,線程堆疊、EXE 和任何 DLL 映像、堆積記憶體、CLR 記憶體仍可由 OS 分頁。

從 SQL Server 2008 SP1 累積更新 2 開始,SQL Server Standard 和 Enterprise 版本都可以使用鎖定記憶體中的頁面用戶權力。 如需支持鎖定頁面的詳細資訊,請檢視 KB970070 - SQL Server Standard Edition (64 位) 系統上鎖定頁面的支援。

若要在記憶體中指派鎖定分頁用戶權力,請遵循下列步驟:

  1. 按兩下 [開始],按兩下 [執行],輸入 gpedit.msc,然後按兩下 [ 確定]。
  2. 注意 [組策略] 對話框隨即出現。
  3. 展開 [ 計算機設定],然後展開 [ Windows 設定]。
  4. 展開 [安全性設定],然後展開 [ 本機原則]。
  5. 按兩下 [用戶權力指派],然後按兩下 [ 鎖定記憶體中的頁面 ]。
  6. 在 [ 本機安全策略設定 ] 對話框中,按兩下 [ 新增使用者群組]。
  7. 在 [ 選取使用者群組 ] 對話框中,新增有權執行Sqlservr.exe檔案的帳戶,然後按兩下 [ 確定]。
  8. 關閉 [ 組策略] 對話框。
  9. 重新啟動 SQL Server 服務。

在您指派記憶體中的鎖定頁面用戶權力並重新啟動 SQL Server 服務之後,Windows 操作系統就不會再分頁出 SQL Server 進程內的緩衝池記憶體。 不過,Windows 操作系統仍然可以在 SQL Server 進程內分頁顯示非緩衝區集區內存。

您可以確認 SQL Server 實例使用用戶權力,方法是確定下列訊息會在啟動時在 SQL Server 錯誤記錄檔中寫入:「針對緩衝池使用鎖定的頁面」

此訊息僅適用於 SQL Server。 如需 ERRORLOG 中此訊息的詳細資訊,請流覽下列內容: 我是否必須指派本機系統中記憶體許可權的鎖定頁面

當 Windows 作業系統分頁出非緩衝區集區內存時,您仍然可能會遇到效能問題。 不過,「說明」一節中提及的錯誤訊息不會記錄在 SQL Server 錯誤記錄檔中。

導致 SQL Server 記憶體分頁的原因

有三大類問題可能會導致此問題:

  • 應用程式相關問題:所有應用程式在一起都耗盡了可用的物理記憶體,而且OS必須釋放一些記憶體,才能要求資源的新應用程式。 通常,這裡的方法是尋找哪些應用程式耗盡記憶體,並採取必要的步驟來平衡記憶體之間的記憶體,而不會導致 RAM 耗盡。
  • 設備驅動器問題:如果驅動程式呼叫記憶體配置函式不正確,設備驅動器可能會導致所有進程的工作集分頁。
  • 操作系統問題

您可以在下方找到每個類別的相關信息

  • 應用程式相關問題:應用程式一起可能會取用系統上的所有 RAM。 如果對記憶體提出新的要求,則OS會嘗試滿足這些要求,如果沒有可用記憶體,則會修剪執行中應用程式的工作集,以滿足記憶體要求。 在這種情況下,您可能會發現,如果並非所有應用程式都大幅下降,則大部分的工作集。 若要觀察這一點,請收集系統上所有應用程式的下列 效能監視器 計數器:

    • 效能物件:Process
    • 計數器:工作集

    此外,請監視下列計數器,以將系統上可用的物理內存量相互關聯。

    • 效能物件:記憶體
    • 計數器:可用的記憶體 (MB)

    您可能會觀察到的一般行為是減少接近 0 MB 的可用記憶體,同時針對系統上大部分 (所有) 進程突然下降工作集計數器。 如果您觀察到這類行為,您可能需要採取步驟來減少系統上的記憶體使用量,包括減少 SQL Server 的最大伺服器記憶體。

    應用程式也可以使用系統快取太多,而且可能會導致系統快取大幅成長。 為了響應系統快取的成長,系統會分頁顯示 SQL Server 進程或其他應用程式的工作集。 如果您遇到此問題,您可以在應用程式中使用一些記憶體管理功能。 這些函式會控制檔案 I/O 作業可在應用程式中使用的系統快取空間。 例如,您可以使用 SetSystemFileCacheSize 函式和 GetSystemFileCacheSize 函式來控制檔案 I/O 作業可以使用的系統快取空間。

    您可以使用 Memory 性能物件來檢視此物件中各種計數器的值,以判斷系統快取工作集是否使用太多記憶體。 例如,您可以檢視快取位元組和系統快取常駐位元組計數器。 如需本主題的詳細資訊,請參閱:

    您可以下載並部署「Microsoft Windows 動態快取服務」,以控制系統快取所耗用的記憶體。

  • 設備驅動器問題:如果設備驅動器使用 函 MmAllocateContiguousMemory 式,且將 HighestAcceptableAddress 參數的值設定為小於 4 GB(GB),Windows 操作系統可能會分頁顯示系統上的工作集,包括 SQL Server 進程。 若要解決此問題,請連絡設備驅動器廠商以取得驅動程式更新。

    當設備驅動器嘗試配置記憶體時,Windows 作業系統可能會分頁顯示其他應用程式的工作集。 此 Windows Hotfix 可讓您使用事件追蹤來尋找導致問題的裝置驅動程式。 若要尋找導致工作集修剪行為之特定驅動程式的詳細資訊,請參閱 識別配置連續記憶體的驅動程式。

  • 操作系統問題:若要解決導致 Windows 作業系統分頁處理工作集的已知問題,請套用下列Microsoft知識庫文章中所述的 Hotfix。

    注意

    Hotfix 是累計的。 較新版本的 Hotfix 包含該 Hotfix 的舊版。

在指派「鎖定記憶體中的分頁」用戶權力之前的重要考慮

您應該先進行其他考慮,再指派 [鎖定記憶體中的分頁] 用戶權力。 如果您在設定不正確之系統上指派此用戶權力,系統可能會變得不穩定,或遇到整個系統的效能降低。 此外,事件標識碼 333 可能會記錄在事件記錄檔中。

如果您連絡 Microsoft 客戶支援服務 (CSS) 以取得這些問題,CSS 工程師可能會要求您撤銷作為 SQL Server 服務啟動帳戶之使用者帳戶的這個用戶權力。 這個步驟可能需要收集 CSS 工程師可用來設定 SQL Server 的各種選項以及系統上執行之其他應用程式的必要設定的重要效能數據。 在 CSS 工程師收集效能數據之後,您可以將鎖定記憶體中的頁面指派給 SQL Server 服務的啟動帳戶。

在指派記憶體中的鎖定頁面用戶權力之前,請確定您擷取 效能監視器 記錄檔,以判斷安裝在系統上的各種應用程式和服務的記憶體需求。 這些應用程式也包含 SQL Server。 若要判斷記憶體需求,請收集下列基準資訊:

  • 請確定您已正確設定 [最大伺服器記憶體] 選項和 [最小伺服器記憶體] 選項。 這些選項只會反映 SQL Server 進程緩衝池的記憶體需求。 這些選項不包含為 SQL Server 進程內其他元件配置的記憶體。 這些元件包括下列各項:

    • SQL Server 背景工作線程
    • SQL Server 行程在 SQL Server 行程地址空間內載入的各種 DLL 和元件
    • 備份和還原作業
  • DLL 和元件包括各種 OLE DB 提供者、擴充預存程式、Microsoft COM 對象,這些對象用於sp_OACreate預存程式、鏈接的伺服器和 SQL Server CLR。 為這些元件配置的記憶體位於 SQL Server 行程位址空間的非緩衝區集區區域之下。 若要在理想情況下判斷整個 SQL Server 進程可以使用的記憶體數量上限,您必須減去配置給未使用緩衝池之元件所配置的記憶體,以及您想要 SQL Server 進程使用的總記憶體。 然後,您可以使用餘數值來設定最大伺服器記憶體選項。 在設定 [最大伺服器記憶體] 選項和 [最小伺服器記憶體] 選項之前,您應該仔細檢閱《SQL Server 在線叢書》中的主題。

  • 判斷其他應用程式和 Windows 作業系統元件的記憶體需求。 應用程式可能包含其他 SQL Server 元件,例如 SQL Server Agent、SQL Server 複寫 Agent、SQL Server Reporting Services、SQL Server Analysis Services、SQL Server Integration Services 和 SQL Server 全文搜索。 執行備份作業和檔案複製作業的應用程式可能會使用許多記憶體。 請考慮大量複製和產生檔案 IO 的 快照集代理程式 等作業。 當您判斷 max server memory 選項和最小伺服器記憶體選項的值時,您必須考慮所有這些應用程式的記憶體需求。 您可以使用 Process 物件底下的 Private Bytes 計數器和工作集計數器,為每個進程判斷特定進程的記憶體需求。

  • 根據預設,鎖定記憶體中的分頁用戶權力已指派給內建的本機系統帳戶。 如需詳細資訊,請流覽下列Microsoft網站: 我是否需要為本機系統指派鎖定記憶體中的頁面許可權?

  • 如果您針對網域中的所有 SQL Server 進程全域使用 Windows 用戶帳戶,請使用組策略設定來判斷指派的用戶權力。 32 位 SQL Server 進程可能會使用此帳戶作為啟動帳戶。 不過,此帳戶需要鎖定記憶體中的分頁用戶權力,才能啟用 Address Windowing Extensions (AWE) 功能。 如需詳細資訊,請參閱《SQL Server 在線叢書》中的<為 SQL Server 提供最大記憶體數量>主題。

  • 在為多個 SQL Server 實例設定最大伺服器記憶體選項和最小伺服器記憶體選項之前,請考慮每個 SQL Server 實例之非緩衝區集區的記憶體需求。 然後,為每個 SQL Server 實例設定這些選項。

在理想情況下,您會在尖峰負載期間收集此基準資訊。 因此,您可以判斷各種應用程式和元件的記憶體需求,以支援尖峰負載。 記憶體需求會因一個系統而異,視系統上執行的活動和應用程式而定。 您可以查詢動態管理檢視中提供的資訊sys.dm_os_process_memory,以了解系統是否遇到記憶體不足的情況。 如需詳細資訊,請參閱 sys.dm_os_process_memory (Transact-SQL)

Windows Server 2008 和 R2 版本中新增的改善

Windows Server 2008 和 Windows Server 2008 R2 可改善連續記憶體配置機制。 這項改進可讓 Windows Server 2008 和 Windows Server 2008 R2 在新的記憶體要求送達時分頁應用程式工作集的效果一定程度降低。

以下是Microsoft白皮書「Windows 記憶體管理進階」的改善說明:

在 Windows Server 2008 中,實體連續記憶體的配置會大幅增強。 配置連續記憶體的要求更有可能成功,因為記憶體管理員現在會動態取代頁面,通常不需要修剪工作集或執行 I/O 作業。 此外,更多類型的頁面,例如核心堆疊和文件系統元數據頁面等,現在是取代的候選專案。 因此,在任何指定時間,通常會提供更連續的記憶體。 此外,獲得這類配置的成本大幅降低。

如需詳細資訊,請檢視 SQL Server 工作集修剪問題

本文提及的協力廠商產品是由與 Microsoft 無關的獨立廠商所製造。 Microsoft 不以默示或其他方式,提供與這些產品的效能或可靠性有關的擔保。