日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
SQLServer錯誤701系統(tǒng)內(nèi)存不足,無法運行此查詢。故障處理修復支持遠程

詳細信息

Attribute
產(chǎn)品名稱 SQL Server
事件 ID 701
事件源 MSSQLSERVER
組件 SQLEngine
符號名稱 NOSYSMEM
消息正文 系統(tǒng)內(nèi)存不足,無法運行此查詢。

注意

本文側(cè)重介紹 SQL Server。 有關(guān) Azure SQL 數(shù)據(jù)庫中的內(nèi)存不足問題的疑難解答,請參閱排查 Azure SQL 數(shù)據(jù)庫的內(nèi)存不足錯誤。

說明

當SQL Server未能分配足夠的內(nèi)存來運行查詢時,會發(fā)生錯誤 701。 造成內(nèi)存不足的因素可能有很多,包括操作系統(tǒng)設置、物理內(nèi)存可用性、其他組件在 SQL Server 內(nèi)使用內(nèi)存或當前工作負荷存在內(nèi)存限制。 大多數(shù)情況下,失敗的事務不是引發(fā)此錯誤的原因。 總的來說,原因可以分為三類:

外部或操作系統(tǒng)內(nèi)存壓力

外部壓力是指進程外部的組件的內(nèi)存利用率較高,導致 SQL Server 內(nèi)存不足。 必須查明系統(tǒng)上的其他應用程序是否正在消耗內(nèi)存,導致內(nèi)存可用性較低。 SQL Server 是設計用于通過減少內(nèi)存使用量來應對操作系統(tǒng)內(nèi)存壓力的為數(shù)不多的應用程序之一。 這意味著,如果某個應用程序或驅(qū)動程序請求內(nèi)存,操作系統(tǒng)將向所有應用程序發(fā)送一個釋放內(nèi)存的信號,SQL Server 將通過減少其自身的內(nèi)存使用量來做出響應。 很少有其他應用程序做出響應,因為它們不用于偵聽該通知。 因此,如果 SQL 開始減少其內(nèi)存使用量,則其內(nèi)存池也會減小,任何需要內(nèi)存的組件都可能無法獲取它。 你將開始收到 701 和其他與內(nèi)存相關(guān)的錯誤。 有關(guān)詳細信息,請參閱 SQL Server 內(nèi)存體系結(jié)構(gòu)

內(nèi)部內(nèi)存壓力,不來自 SQL Server

內(nèi)部內(nèi)存壓力是指由 SQL Server 進程內(nèi)部的因素導致的低內(nèi)存可用性。 SQL Server 進程內(nèi)部運行的某些組件可能是 SQL Server 引擎的“外部”組件。 示例包括鏈接服務器、SQLCLR 組件、擴展過程 (XP) 和 OLE 自動化 (sp_OA*) 等 DLL。 其他示例包括防病毒或其他安全程序,它們將 DLL 注入進程中以用于監(jiān)視目的。 這些組件中的任何組件出現(xiàn)問題或設計不佳都可能導致消耗大量內(nèi)存。 例如,考慮鏈接服務器,該服務器將來自外部源的 2000 萬行數(shù)據(jù)緩存到 SQL Server 內(nèi)存中。 就 SQL Server 而言,內(nèi)存分配器不會報告高內(nèi)存使用率,但 SQL Server 進程內(nèi)部消耗的內(nèi)存將會很高。 例如,鏈接服務器 DLL 的此內(nèi)存增長會導致 SQL Server 開始減少其內(nèi)存使用量(見上文),并造成 SQL Server 內(nèi)部的組件內(nèi)存不足,從而導致類似 701 的錯誤。

內(nèi)部內(nèi)存壓力,來自 SQL Server 組件

來自 SQL Server 引擎內(nèi)部的組件的內(nèi)部內(nèi)存壓力也可能導致錯誤 701。 有數(shù)百個組件在 SQL Server 中分配內(nèi)存,這些組件通過內(nèi)存分配器跟蹤。 必須確定哪些內(nèi)存分配器負責最大的內(nèi)存分配,才能進一步解決此問題。 例如,如果發(fā)現(xiàn) OBJECTSTORE_LOCK_MANAGER 內(nèi)存分配器顯示較大內(nèi)存分配,則需要進一步了解鎖管理器消耗如此多內(nèi)存的原因。 你可能會發(fā)現(xiàn),有些查詢會獲取大量的鎖,請使用索引對其進行優(yōu)化,或減少長時間持有鎖的事務,或檢查是否禁用了鎖升級。 每個內(nèi)存分配器或組件都有一種獨特的方式來訪問和使用內(nèi)存。 有關(guān)詳細信息,請參閱內(nèi)存分配器類型及其說明。

用戶操作

如果偶爾或者短暫出現(xiàn)錯誤 701,則可能存在可自行解決的短期內(nèi)存問題。 在這些情況下,你可能不需要采取任何措施。 但是,如果錯誤在多個連接上多次出現(xiàn),并且持續(xù)數(shù)秒或更長時間,請按照以下步驟進行進一步的故障排除。

下面的列表概述了有助于解決內(nèi)存錯誤的一般步驟。

診斷工具和捕獲

允許收集故障排除數(shù)據(jù)的診斷工具包括性能監(jiān)視器、sys.dm_os_memory_clerks 和 DBCC MEMORYSTATUS 。

使用性能監(jiān)視器配置和收集以下計數(shù)器:

  • Memory:Available MB
  • Process:Working Set
  • Process:Private Bytes
  • SQL Server:Memory Manager: (all counters)
  • SQL Server:Buffer Manager: (all counters)

在受影響的 SQL Server 上收集此查詢的定期輸出

SELECT pages_kb, type, name, virtual_memory_committed_kb, awe_allocated_kb
FROM sys.dm_os_memory_clerks
ORDER BY pages_kb DESC

Pssdiag 或 SQL LogScout

自動捕獲這些數(shù)據(jù)點的另一種方式是使用 PSSDIAG 或 SQL LogScout 等工具。

  • 如果使用 Pssdiag,請配置為捕獲“Perfmon”收集器和“自定義診斷\SQL 內(nèi)存錯誤”收集器
  • 如果使用 SQL LogScout,請配置為捕獲“內(nèi)存”方案

以下各部分介紹了每種方案(外部或內(nèi)部內(nèi)存壓力)的更詳細步驟。

外部壓力:診斷和解決方案

  • 若要診斷 SQL Server 進程外部系統(tǒng)上的內(nèi)存不足情況,請收集性能監(jiān)視器計數(shù)器。 通過查看這些計數(shù)器,調(diào)查除 SQL Server 之外的應用程序或服務是否正在消耗此服務器上的內(nèi)存:

    • Memory:Available MB
    • Process:Working Set
    • Process:Private Bytes

    下面是使用 PowerShell 的示例 Perfmon 日志集合

    clear
    $serverName = $env:COMPUTERNAME
    $Counters = @(
       ("\\$serverName" +"\Memory\Available MBytes"),
       ("\\$serverName" +"\Process(*)\Working Set"),
       ("\\$serverName" +"\Process(*)\Private Bytes")
    )
    
    Get-Counter -Counter $Counters -SampleInterval 2 -MaxSamples 1 | ForEach-Object  {
    $_.CounterSamples | ForEach-Object 	  {
       [pscustomobject]@{
          TimeStamp = $_.TimeStamp
          Path = $_.Path
          Value = ([Math]::Round($_.CookedValue, 3)) }
    }
    }
    
  • 查看系統(tǒng)事件日志,查找與內(nèi)存相關(guān)的錯誤(例如,虛擬內(nèi)存不足)。

  • 查看應用程序事件日志,了解與應用程序相關(guān)的內(nèi)存問題。

    下面是一個示例 PowerShell 腳本,用于查詢關(guān)鍵字“memory”的 System 和 Applicaiton 事件日志。 隨意使用其他字符串(如“resource”)進行搜索:

    Get-EventLog System -ComputerName "$env:COMPUTERNAME" -Message "*memory*"
    Get-EventLog Application -ComputerName "$env:COMPUTERNAME" -Message "*memory*"
    
  • 解決不太關(guān)鍵的應用程序或服務的任何代碼或配置問題,以減少其內(nèi)存使用量。

  • 如果除SQL Server之外的應用程序消耗資源,請嘗試停止或重新安排這些應用程序,或考慮在單獨的服務器上運行它們。 這些步驟將消除外部內(nèi)存壓力。

內(nèi)部內(nèi)存壓力,不來自 SQL Server:診斷和解決方案

若要診斷 SQL Server 內(nèi)部的模塊 (DLL) 導致的內(nèi)部內(nèi)存壓力,請使用以下方法:

  • 如果 SQL Server 未使用鎖定內(nèi)存頁 (AWE API),那么它的大部分內(nèi)存都將反映在性能監(jiān)視器的“Process:Private Bytes”計數(shù)器(SQLServr 實例)中。 SQL Server 引擎中的總體內(nèi)存使用情況反映在“SQL Server:Memory Manager: Total Server Memory (KB)”計數(shù)器中。 如果發(fā)現(xiàn)值“Process:Private Bytes”和“SQL Server:Memory Manager: Total Server Memory (KB)”之間存在顯著差異,則這種差異可能來自 DLL(鏈接服務器、XP、SQLCLR 等) 。 例如,如果“Private bytes”為 300 GB,而“Total Server Memory”為 250 GB,則進程中大約 50 GB 的總內(nèi)存來自 SQL Server 引擎外部 。

  • 如果 SQL Server 使用鎖定內(nèi)存頁 (AWE API),那么確定問題將更具挑戰(zhàn)性,因為性能監(jiān)視器不提供跟蹤單個進程的內(nèi)存使用情況的 AWE 計數(shù)器。 SQL Server 引擎中的總體內(nèi)存使用情況反映在“SQL Server:Memory Manager: Total Server Memory (KB)”計數(shù)器中。 典型的“Process:Private Bytes”值可能在 300 MB 和 1-2 GB 之間變化。 如果發(fā)現(xiàn)“Process:Private Bytes”的使用量顯著超過此典型使用量,則差異可能來自 DLL(鏈接服務器、XP、SQLCLR 等)。 例如,如果“Private bytes”計數(shù)器為 5-4 GB,并且 SQL Server 使用了鎖定內(nèi)存頁 (AWE),則大部分專用字節(jié)可能來自 SQL Server 引擎外部。 這是一種近似技術(shù)。

  • 使用任務列表實用工具確定 SQL Server 空間中加載的所有 DLL:

    tasklist /M /FI "IMAGENAME eq sqlservr.exe"
    
  • 還可以使用此查詢來檢查加載的模塊 (DLL),并查看是否存在不需要的內(nèi)容

    SELECT * FROM sys.dm_os_loaded_modules
    
  • 如果懷疑某個鏈接服務器模塊導致消耗大量內(nèi)存,可以通過禁用“允許進程內(nèi)”選項將其配置為在進程外運行。 有關(guān)詳細信息,請參閱創(chuàng)建鏈接服務器。 并非所有鏈接服務器 OLEDB 提供程序都可以在進程外運行;有關(guān)更多信息,請聯(lián)系產(chǎn)品制造商。

  • 在使用 OLE 自動化對象 (sp_OA*) 的極少數(shù)情況下,可以通過將“上下文”設置為 4 來將對象配置為在 SQL Server 外部的進程中運行(僅限本地 (.exe) OLE 服務器)。 有關(guān)詳細信息,請參閱 sp_OACreate。

SQL Server 引擎的內(nèi)部內(nèi)存使用:診斷和解決方案

  • 開始收集 SQL Server:SQL Server:Buffer Manager 的性能監(jiān)視器計數(shù)器,SQL Server:內(nèi)存管理器。

  • 多次查詢 SQL Server 內(nèi)存分配器 DMV,查看引擎中內(nèi)存消耗最大的位置:

    SELECT pages_kb, type, name, virtual_memory_committed_kb, awe_allocated_kb
    FROM sys.dm_os_memory_clerks
    ORDER BY pages_kb DESC
    
  • 或者,可以在看到這些錯誤消息時觀察更詳細的 DBCC MEMORYSTATUS 輸出及其變化情況。

    DBCC MEMORYSTATUS
    
  • 如果在內(nèi)存分配器中發(fā)現(xiàn)了明顯的導致錯誤的因素,請專注于解決該組件的內(nèi)存消耗具體問題。 下面是幾個示例:

    • 如果 MEMORYCLERK_SQLQERESERVATIONS 內(nèi)存分配器正在消耗內(nèi)存,請確定使用大量內(nèi)存授予的查詢并通過索引對其進行優(yōu)化,重寫它們(例如,刪除排序依據(jù)),或者應用查詢提示。
    • 如果緩存了大量臨時查詢計劃,則 CACHESTORE_SQLCP 內(nèi)存分配器將使用大量內(nèi)存。 識別其查詢計劃不能重復使用的非參數(shù)化查詢,并通過轉(zhuǎn)換為存儲過程、使用 sp_executesql 或使用 FORCED 參數(shù)化來參數(shù)化這些查詢。
    • 如果對象計劃緩存存儲 CACHESTORE_OBJCP 消耗了大量內(nèi)存,請執(zhí)行以下操作:確定哪些存儲過程、函數(shù)或觸發(fā)器使用了大量內(nèi)存并且可能重新設計應用程序。 通常,這可能由大量數(shù)據(jù)庫或架構(gòu)引起,每個數(shù)據(jù)庫或架構(gòu)中都有數(shù)百個過程。
    • 如果 OBJECTSTORE_LOCK_MANAGER 內(nèi)存分配器顯示了較大內(nèi)存分配,請確定應用了多個鎖的查詢,并使用索引對其進行優(yōu)化。 減少導致在某些隔離級別長時間不釋放鎖的事務,或檢查是否禁用了鎖升級。

可能使內(nèi)存可用的快速緩解措施

以下操作可能會釋放一些內(nèi)存并將其提供給SQL Server:

  • 檢查以下 SQL Server 內(nèi)存配置參數(shù),并在可能的情況下考慮增加最大服務器內(nèi)存:

    • max server memory

    • min server memory

      注意不正常的設置。 根據(jù)需要更正它們。 滿足更高內(nèi)存要求。 服務器內(nèi)存配置選項中列出了默認設置。

  • 如果尚未配置最大服務器內(nèi)存(尤其是使用鎖定內(nèi)存頁),請考慮設置為特定值,以便為操作系統(tǒng)分配一些內(nèi)存。 請參閱鎖定內(nèi)存頁服務器配置選項。

  • 檢查查詢工作負荷:并發(fā)會話數(shù)、當前正在執(zhí)行的查詢,并查看是否存在可能會暫時停止或移動到另一 SQL Server 的不太關(guān)鍵的應用程序。

  • 如果在虛擬機 (VM) 上運行 SQL Server,請確保該 VM 的內(nèi)存未過量使用。 有關(guān)如何為 VM 配置內(nèi)存的想法,請參閱此博客 虛擬化 – 內(nèi)存過度使用以及如何在 VM 中檢測內(nèi)存 和 排查 ESX/ESXi 虛擬機性能問題 (內(nèi)存過度)

  • 可以運行以下 DBCC 命令來釋放多個SQL Server內(nèi)存緩存。

    • DBCC FREESYSTEMCACHE

    • DBCC FREESESSIONCACHE

    • DBCC FREEPROCCACHE

  • 如果使用 Resource Governor,建議檢查資源池或工作負荷組設置,看看它們是否對內(nèi)存限制過大。

  • 如果問題仍存在,你將需要進一步調(diào)查,可能需要增加服務器資源 (RAM)。

香港美國云服務器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務提供商,擁有超過10年的服務器租用、服務器托管、云服務器、虛擬主機、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗。專業(yè)提供云主機、虛擬主機、域名注冊、VPS主機、云服務器、香港云服務器、免備案服務器等。


本文題目:SQLServer錯誤701系統(tǒng)內(nèi)存不足,無法運行此查詢。故障處理修復支持遠程
網(wǎng)站地址:http://www.5511xx.com/article/dpipshe.html