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 提供者、擴充預存程式、用於sp_OACreate預存程式、連結伺服器和 SQL Server CLR 的 Microsoft COM 物件。 為這些元件配置的記憶體位於 SQL Server 進程位址空間的非緩衝區集區區域之下。 若要在理想情況下判斷整個 SQL Server 進程可以使用的記憶體數量上限,您必須減去配置給未使用緩衝集區之元件所配置的記憶體,以及您想要 SQL Server 進程使用的總記憶體。 然後,您可以使用餘數值來設定最大伺服器記憶體選項。 在設定 [最大伺服器記憶體] 選項和 [最小伺服器記憶體] 選項之前,您應該仔細檢閱《SQL Server 線上叢書》中的主題。

  • 判斷其他應用程式和 Windows 作業系統元件的記憶體需求。 應用程式可能包含其他 SQL Server 元件,例如 SQL Server Agent、SQL Server 複寫代理程式、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 不以默示或其他方式,提供與這些產品的效能或可靠性有關的擔保。