요약
이 문서에서는 메모리 부족 및 메모리 할당 실패, 메모리 부족 상태 및 관련 성능 문제를 포함하여 SQL Server 메모리 문제를 해결하는 방법을 설명합니다. 증상, 세 가지 주요 메모리 압력 범주(외부, 엔진이 아닌 모듈의 내부 및 SQL Server 엔진 구성 요소의 내부), 데이터를 수집하는 데 사용할 수 있는 진단 도구 및 SQL Server 인스턴스의 메모리 압력을 해결하거나 완화하기 위해 수행할 수 있는 단계를 설명합니다.
메모리 부족 오류의 증상
SQL Server는 복잡하고 풍부한 기능 집합에 해당하는 복잡한 메모리 아키텍처 를 사용합니다. 메모리 요구 사항이 다양하기 때문에 많은 원본으로 인해 메모리 사용량과 메모리 압력이 발생할 수 있으며 이로 인해 메모리 부족 상태가 발생할 수 있습니다.
일반적인 오류는 SQL Server 메모리가 낮음을 나타냅니다. 이러한 오류의 예는 다음과 같습니다.
- 701: 쿼리를 실행하기에 충분한 메모리를 할당하지 못했습니다.
- 802: 버퍼 풀(데이터 또는 인덱스 페이지)에서 페이지를 할당하는 메모리를 얻지 못했습니다.
- 1204: 잠금을 위해 메모리를 할당하지 못했습니다.
- 6322: XML 파서에 대한 메모리를 할당하지 못했습니다.
- 6513: 메모리 압력으로 인해 CLR을 초기화하지 못했습니다.
- 6533: 메모리 부족으로 인해 AppDomain이 언로드되었습니다.
- 8318: 메모리 부족으로 인해 SQL 성능 카운터를 로드하지 못했습니다.
- 8356 또는 8359: 메모리 부족으로 인해 ETW 또는 SQL 추적이 실행되지 않습니다.
- 8556: 메모리 부족으로 인해 MSDTC를 로드하지 못했습니다.
- 8645: 메모리 부여(정렬 및 해시)에 대한 메모리가 없어 쿼리를 실행하지 못했습니다.
- 8902: DBCC를 실행하는 동안 메모리를 할당하지 못했습니다.
- 9695 또는 9696: Service Broker 작업에 메모리를 할당하지 못했습니다.
- 17131 또는 17132: 메모리 부족으로 인한 서버 시작 실패
- 17890: OS에서 페이징되는 SQL 메모리로 인해 메모리를 할당하지 못했습니다.
- 18053: 서식 지정 중 오류가 발생했기 때문에 오류가 간략 모드로 출력됩니다. 추적, ETW 및 알림을 건너뜁니다.
- 22986 또는 22987: 메모리 부족으로 인한 데이터 캡처 오류를 변경합니다.
- 25601: Xevent 엔진의 메모리가 부족합니다.
- 26053: 메모리 부족으로 인해 SQL 네트워크 인터페이스를 초기화하지 못합니다.
- 30085, 30086, 30094: 메모리 부족으로 인해 SQL 전체 텍스트 작업이 실패합니다.
메모리 부족 문제의 원인
많은 요인으로 인해 메모리가 부족해질 수 있습니다. 이러한 요인에는 운영 체제 설정, 실제 메모리 가용성, SQL Server 내에서 메모리를 사용하는 구성 요소 및 현재 워크로드의 메모리 제한이 포함됩니다. 대부분의 경우 메모리 부족 오류로 실패하는 쿼리는 오류의 원인이 아닙니다. 원인을 세 가지 범주로 그룹화할 수 있습니다.
외부 또는 OS 메모리 압력
외부 압력은 SQL Server 메모리 부족으로 이어지는 SQL Server 프로세스 외부의 구성 요소에서 높은 메모리 사용률을 나타냅니다. 시스템의 다른 애플리케이션이 메모리를 사용하고 메모리 가용성이 낮은지 확인합니다. SQL Server 메모리 사용을 줄여 OS 메모리 압력에 응답하도록 설계된 몇 안 되는 애플리케이션 중 하나입니다. 애플리케이션 또는 드라이버가 메모리를 요청하는 경우 OS는 모든 애플리케이션에 신호를 보내 메모리를 확보하고 SQL Server 자체 메모리 사용량을 줄여 응답합니다. 다른 애플리케이션은 해당 알림을 수신하도록 설계되지 않았기 때문에 응답하지 않습니다. SQL Server 메모리 사용량을 줄이면 메모리 풀이 축소되고 메모리가 필요한 구성 요소가 메모리를 얻지 못할 수 있습니다. 따라서 701 또는 기타 메모리 관련 오류가 발생합니다. SQL Server 동적으로 메모리를 할당하고 해제하는 방법에 대한 자세한 내용은 SQL Server 메모리 아키텍처 참조하세요. 자세한 진단 및 솔루션은 이 문서의 외부 메모리 압력을 참조하세요.
세 가지 광범위한 문제 범주로 인해 OS 메모리 부족이 발생할 수 있습니다.
- 애플리케이션 관련 문제: 하나 이상의 애플리케이션이 함께 사용 가능한 실제 메모리를 소모합니다. OS는 일부 메모리를 해제하여 리소스에 대한 새 애플리케이션 요청에 응답합니다. 메모리를 소모하는 애플리케이션을 찾고 RAM을 소모하지 않고 메모리를 분산하는 단계를 수행합니다.
- 디바이스 드라이버 문제: 드라이버가 메모리 할당 함수를 잘못 호출하는 경우 디바이스 드라이버로 인해 모든 프로세스의 작업 집합 페이징이 발생할 수 있습니다.
- 운영 체제 제품 문제.
자세한 설명 및 문제 해결 단계는 MSSQLSERVER_17890 참조하세요.
엔진이 아닌 모듈의 내부 메모리 압력
내부 메모리 압력은 SQL Server 프로세스 내부 요인으로 인해 발생하는 낮은 메모리 가용성을 의미합니다. SQL Server 프로세스 내에서 실행되는 일부 구성 요소는 SQL Server 엔진 외부의 요소입니다. 예를 들어 연결된 서버, SQLCLR 프로시저 또는 함수, 확장 프로시저(XP) 및 OLE 자동화()와 같은 OLE DB 공급자(sp_OA*DLL)가 있습니다. 그 외에는 모니터링 목적으로 프로세스에 DLL을 삽입하는 바이러스 백신 또는 보안 프로그램이 포함됩니다. 이러한 구성 요소의 문제 또는 잘못된 디자인으로 인해 메모리 사용량이 커질 수 있습니다. 예를 들어 외부 원본에서 SQL Server 메모리로 2천만 행의 데이터를 캐싱하는 연결된 서버를 고려합니다. 엔진 관점에서는 어떤 메모리 클러크도 높은 메모리 사용량을 나타내지 않지만, SQL Server 프로세스 내부에서 소비되는 메모리는 높습니다. 연결된 서버 DLL의 메모리 증가로 인해 SQL Server 메모리 사용량을 줄이기 시작하고 엔진 구성 요소에 대한 메모리 조건이 낮아져 메모리 부족 오류가 발생합니다. 자세한 진단 및 솔루션은 엔진이 아닌 모듈의 내부 메모리 압력을 참조하세요.
참고
SQL Server 프로세스 공간에 사용되는 몇 가지 Microsoft DLL(예: MSOLEDBSQL 및 SQL Server Native Client)은 보고 및 할당을 위해 SQL Server 메모리 인프라와 인터페이스할 수 있습니다. 실행 SELECT * FROM sys.dm_os_memory_clerks WHERE type='MEMORYCLERK_HOST' 하여 해당 목록을 가져와 일부 할당에 대한 메모리 사용량을 추적합니다. SQL Server SNAC(Native Client)는 더 이상 사용되지 않습니다. 새 개발에서는 MSOLEDBSQL 또는 Microsoft ODBC Driver for SQL Server 사용해야 합니다.
SQL Server 엔진 구성 요소의 내부 메모리 압력
SQL Server 엔진 내 구성 요소의 내부 메모리 압력으로 인해 메모리 부족 오류가 발생할 수도 있습니다.
memory clerks를 통해 추적된 수백 개의 구성 요소는 SQL Server 메모리를 할당합니다. 문제를 해결하기 위해 가장 큰 메모리 할당을 담당하는 메모리 클러크를 식별하세요. 예를 들어 OBJECTSTORE_LOCK_MANAGER 메모리 클러크에 큰 할당이 표시되면 잠금 관리자가 왜 그렇게 많은 메모리를 소비하는지 확인합니다. 많은 수의 잠금을 획득하는 쿼리를 발견할 수 있습니다. 인덱스를 사용하거나, 오랫동안 잠금을 유지하는 트랜잭션을 줄이거나, 잠금 에스컬레이션을 사용하지 않도록 설정했는지 확인하여 이러한 쿼리를 최적화합니다. 각 메모리 클럭 또는 구성 요소에는 메모리를 사용하는 고유한 방법이 있습니다. 자세한 내용은 sys.dm_os_memory_clerks 및 메모리 클럭 유형 설명을 참조하세요. 자세한 진단 및 솔루션은 SQL Server 엔진별 메모리 사용량 참조하세요.
메모리 압력 유형
다음 그래프는 SQL Server의 메모리 부족 상태로 이어질 수 있는 압력 유형을 보여 줍니다.
메모리 문제를 해결하는 진단 도구
다음 진단 도구를 사용하여 문제 해결 데이터를 수집합니다.
성능 모니터
성능 모니터 사용하여 다음 카운터를 설정하고 수집합니다.
- 메모리:사용 가능한 MBytes
- 프로세스:작업 집합
- 프로세스:프라이빗 바이트
- SQL Server:Memory Manager: (모든 카운터)
- SQL Server:Buffer Manager: (모든 카운터)
DMV 및 DBCC MEMORYSTATUS
sys.dm_os_memory_clerks 또는 DBCC MEMORYSTATUS 사용하여 SQL Server 내의 전체 메모리 사용량을 관찰합니다.
sys.dm_os_memory_clerks 는 메모리 클럭당 한 행을 반환하며 가장 많은 메모리를 사용하는 구성 요소를 찾는 가장 좋은 시작점입니다.
DBCC MEMORYSTATUS 는 메모리 관리자, 버퍼 풀 및 클럭별로 정보를 그룹화하는 보다 자세한 스냅샷을 반환합니다.
SSMS의 메모리 사용량 보고서
SQL Server Management Studio(SSMS)에서 메모리 사용량을 보려면 다음을 참조하세요.
- SSMS를 열고 서버에 연결합니다.
- 개체 탐색기 SQL Server 인스턴스 이름을 선택하고 길게 누르거나 마우스 오른쪽 단추로 클릭합니다.
- 컨텍스트 메뉴에서 보고서>표준 보고서>메모리 사용량을 선택합니다.
PSSDiag 또는 SQL LogScout
이러한 데이터 요소를 자동으로 캡처하려면 PSSDiag 또는 SQL LogScout과 같은 도구를 사용합니다.
- PSSDiag를 사용하는 경우 Perfmon 수집기 및 사용자 지정 진단\SQL 메모리 오류 수집기를 캡처하도록 설정합니다.
- SQL LogScout을 사용하는 경우 메모리 시나리오를 캡처하도록 설정합니다.
메모리 확보를 위한 빠른 조치
다음 작업은 일부 메모리를 해제하고 SQL Server 사용할 수 있도록 할 수 있습니다. 근본 원인을 조사하는 동안 단기 완화로 사용합니다.
메모리 구성 변경
다음 SQL Server 메모리 구성 매개 변수를 확인하고 가능한 경우 최대 서버 메모리를 늘리는 것이 좋습니다.
- 최대 서버 메모리
- 최소 서버 메모리
참고
비정상적인 설정이 발견되면 필요에 따라 수정하고 메모리 요구 사항 증가를 고려합니다. 기본 설정은 서버 메모리 구성 옵션에 나열되어 있습니다.
최대 서버 메모리를 설정하지 않은 경우, 특히 메모리의 페이지 잠금을 사용하도록 설정한 경우 OS에 대한 메모리를 유지하도록 특정 값으로 설정합니다. 자세한 내용은 LPIM(메모리의 페이지 잠금) 서버 구성 옵션을 참조하세요.
워크로드 변경 또는 이동
동시 세션 수와 현재 실행 중인 쿼리를 포함하여 쿼리 워크로드를 검토합니다. 덜 중요한 애플리케이션을 일시적으로 중지하거나 다른 SQL Server 인스턴스로 이동할 수 있는지 확인합니다.
읽기 전용 워크로드의 경우 Always On 환경에서 읽기 전용 보조 복제본으로 이동하는 것이 좋습니다. 자세한 내용은 읽기 전용 워크로드를 Always On 가용성 그룹의 보조 복제본으로 오프로드하고 Always On 가용성 그룹의 보조 복제본에 대한 읽기 전용 액세스 구성을 참조하세요.
가상 머신 메모리 구성 확인
VM(가상 머신)에서 SQL Server 실행하는 경우 호스트가 VM의 메모리를 과도하게 커밋하지 않는지 확인합니다. Azure VM에서 SQL Server 메모리 크기 조정에 대한 지침은
SQL Server 내의 메모리 해제
다음 DBCC 명령 중 하나 이상을 실행하여 SQL Server 메모리 캐시를 해제합니다. 다시 채워야 하는 캐시를 지우기 때문에 프로덕션 시스템에서는 다음 명령을 주의해서 사용합니다.
DBCC FREESYSTEMCACHEDBCC FREESESSIONCACHEDBCC FREEPROCCACHE
SQL Server 서비스 다시 시작
메모리 소모가 중요하고 SQL Server 쿼리를 처리할 수 없는 경우 서비스를 최후의 수단으로 다시 시작할 수 있습니다. 이 작업은 모든 활성 연결을 삭제하고 캐시를 지우므로 다른 옵션이 실패할 때만 사용합니다.
Resource Governor 설정 검토
Resource Governor 사용하는 경우 리소스 풀 및 워크로드 그룹 설정을 확인하여 메모리를 너무 크게 제한하지 않는지 확인합니다. 자세한 내용은 Resource Governor를 참조하세요.
RAM 추가
이전 단계 이후에도 문제가 계속되면 자세히 조사하고 물리적 또는 가상 서버에서 RAM(서버 리소스)을 늘리는 것이 좋습니다.
메모리 압력 진단 및 수정
메모리 부족 오류가 가끔 또는 짧은 기간 동안만 나타나는 경우 문제는 수명이 짧고 자체 해결될 수 있으며 작업이 필요하지 않을 수 있습니다. 오류가 여러 연결에서 여러 번 발생하고 몇 초 이상 지속되는 경우 다음 섹션의 진단 및 솔루션에 따라 근본 원인을 식별하고 해결합니다.
외부 메모리 압력
SQL Server 프로세스 외부의 시스템에서 메모리 부족 상태를 진단하려면 다음 방법을 사용합니다.
성능 모니터 카운터를 수집합니다. SQL Server 이외의 애플리케이션 또는 서비스가 다음 카운터를 확인하여 이 서버에서 메모리를 소비하는지 확인합니다.
- 메모리:사용 가능한 MBytes
- 프로세스:작업 집합
- 프로세스:프라이빗 바이트
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)) } } }시스템 이벤트 로그를 검토하고 메모리 관련 오류(예: 낮은 가상 메모리)를 찾습니다.
애플리케이션 관련 메모리 문제에 대한 애플리케이션 이벤트 로그를 검토합니다.
다음은 시스템 및 애플리케이션 이벤트 로그에서 "memory" 키워드를 쿼리하는 PowerShell 스크립트 예제입니다. 검색에 "리소스"와 같은 다른 문자열을 사용할 수 있습니다.
Get-EventLog System -ComputerName "$env:COMPUTERNAME" -Message "*memory*" Get-EventLog Application -ComputerName "$env:COMPUTERNAME" -Message "*memory*"덜 중요한 애플리케이션 또는 서비스에 대한 코드 또는 구성 문제를 해결하여 메모리 사용량을 줄입니다.
SQL Server 외에 애플리케이션에서 리소스를 사용하는 경우 리소스를 중지하거나 다시 예약하거나 별도의 서버에서 실행합니다. 이러한 단계는 외부 메모리 압력을 제거합니다.
엔진이 아닌 모듈의 내부 메모리 압력
SQL Server 내의 모듈(DLL)로 인한 내부 메모리 압력을 진단하려면 다음 방법을 사용합니다.
SQL Server AWE API(Lock Pages in Memory를 사용하지 않는 경우 대부분의 메모리 사용량이 성능 모니터 인스턴스
sqlservr카운터에 표시됩니다. SQL Server:Memory Manager: 총 서버 메모리(KB) 카운터는 SQL Server 엔진 내에서 전체 메모리 사용량을 표시합니다. Process:Private Bytes 및 SQL Server:Memory Manager: 총 서버 메모리(KB) 간에 상당한 차이가 있는 경우 해당 차이는 DLL(연결된 서버, XP, SQLCLR 등)에서 발생할 수 있습니다. 예를 들어 Private Bytes가 300GB이고 Total Server Memory가 250GB이면 프로세스의 전체 메모리 약 50GB가 SQL Server 엔진 외부에서 발생합니다.SQL Server AWE API(Lock Pages in Memory)를 사용하는 경우 성능 모니터 개별 프로세스에 대한 메모리 사용량을 추적하는 AWE 카운터를 제공하지 않으므로 문제를 식별하기가 더 어렵습니다. SQL Server:Memory Manager: 총 서버 메모리(KB) 카운터는 SQL Server 엔진 내의 전체 메모리 사용량을 보여 줍니다. 일반적인 프로세스:프라이빗 바이트 값은 전체적으로 300MB에서 1-2GB 사이일 수 있습니다. Process:Private Bytes가 이 일반적인 범위보다 훨씬 높은 경우 DLL(연결된 서버, XP, SQLCLR 등)에서 차이가 발생할 수 있습니다. 예를 들어 Private Bytes가 4-5GB이고 SQL Server AWE(메모리의 페이지 잠금)를 사용하는 경우 Private 바이트의 상당 부분이 SQL Server 엔진 외부에서 발생할 수 있습니다. 이 값은 근사치입니다.
tasklist유틸리티를 사용하여 SQL Server 프로세스 내에 로드된 DLL을 식별합니다.tasklist /M /FI "IMAGENAME eq sqlservr.exe"다음 쿼리를 사용하여 로드된 모듈(DLL)을 검사하고 예기치 않은 항목이 있는지 확인할 수도 있습니다.
SELECT * FROM sys.dm_os_loaded_modules연결된 서버 모듈이 상당한 메모리 소비를 유발하는 것으로 의심되는 경우 처리 허용 옵션을 선택 취소하여 프로세스가 부족하도록 설정합니다. 자세한 내용은 연결된 서버 만들기를 참조하세요. 모든 연결 서버 OLE DB 공급자를 프로세스 외부에서 실행할 수 있는 것은 아닙니다. 자세한 내용은 공급자 제조업체에 문의하세요.
드물게 OLE 자동화 개체(
sp_OA*)를 사용하는 경우 SQL Server 외부 프로세스에서 실행할 개체를 설정할 수 있습니다. 컨텍스트 값을 4(로컬(.exe) OLE 서버만 해당)으로 지정할 수 있습니다. 자세한 내용은sp_OACreate를 참조하세요.
SQL Server 엔진의 내부 메모리 사용량
SQL Server 엔진 내의 구성 요소에서 내부 메모리 압력을 진단하려면 다음 방법을 사용합니다.
SQL Server 대한 성능 모니터 카운터 수집을 시작합니다. SQL Server:Buffer Manager 및 SQL Server:Memory Manager.
SQL Server 메모리 클럭 DMV를 여러 번 쿼리하여 엔진 내에서 가장 높은 메모리 사용량이 발생하는 위치를 확인합니다.
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메모리 관련 항목 중에서 명확한 문제 원인을 식별했다면, 해당 구성 요소의 메모리 사용량 세부 사항에 집중하세요. 다음은 몇 가지 예입니다.
- 메모리 클럭이
MEMORYCLERK_SQLQERESERVATIONS메모리를 사용하는 경우 큰 메모리 부여를 사용하는 쿼리를 식별하고 인덱스를 다시 작성하거나(예: 제거ORDER BY) 메모리 부여 쿼리 힌트(MIN_GRANT_PERCENT및MAX_GRANT_PERCENT)를 적용하여 최적화합니다. 자세한 내용은 쿼리 힌트를 참조하세요. 메모리 부여 사용량을 제어하는 리소스 풀을 만들 수도 있습니다. 메모리 부여에 대한 자세한 내용은 SQL Server 메모리 부여로 인한 성능 저하 또는 메모리 부족 문제 해결을 참조하세요. - 임시 쿼리 계획이 많이 캐시되면
CACHESTORE_SQLCP메모리 클럭이 대량의 메모리를 사용합니다. 계획을 재사용할 수 없는 매개 변수화되지 않은 쿼리를 식별하고, 이를 저장 프로시저로 변환하거나sp_executesql를 사용하거나FORCED매개 변수화를 사용하여 매개 변수화합니다. 추적 플래그 174를 사용하도록 설정한 경우 이를 사용하지 않도록 설정하여 문제를 해결하는지 여부를 확인할 수 있습니다. - 개체 계획 캐시 저장소
CACHESTORE_OBJCP에서 너무 많은 메모리를 사용하는 경우 많은 양의 메모리를 사용하는 저장 프로시저, 함수 또는 트리거를 식별하고 애플리케이션을 다시 디자인하는 것이 좋습니다. 이는 일반적으로 각각 수백 개의 프로시저를 포함하는 많은 데이터베이스 또는 스키마에서 발생합니다. -
OBJECTSTORE_LOCK_MANAGER메모리 클러크에 큰 할당이 표시되는 경우 많은 잠금을 획득하는 쿼리를 식별하고 인덱스를 사용하여 이를 최적화하세요. 특정 격리 수준에서 오랫동안 잠금을 유지하는 트랜잭션을 줄이거나 잠금 에스컬레이션을 사용하지 않도록 설정했는지 확인합니다. - 매우 큰
TokenAndPermUserStore(SELECT type, name, pages_kb FROM sys.dm_os_memory_clerks WHERE name = 'TokenAndPermUserStore')를 관찰하는 경우 추적 플래그 4618 을 사용하여 캐시 크기를 제한할 수 있습니다. -
MEMORYCLERK_XTP메모리 클러크에서 In-Memory OLTP와 관련된 메모리 문제가 관찰되는 경우 In-Memory OLTP의 메모리 사용량 모니터링 및 문제 해결 및 메모리 최적화 tempdb 메타데이터(HkTempDB) 메모리 부족 오류를 참조하세요.
- 메모리 클럭이
자주 묻는 질문
SQL Server 서버의 거의 모든 RAM을 사용하는 이유는 무엇인가요?
기본적으로 SQL Server 버퍼 풀은 데이터 페이지를 캐시하고 물리적 I/O를 줄이기 위해 증가하므로 안정적인 상태 메모리 사용은 일반적으로 max 서버 메모리 설정에 접근합니다. 이 동작은 예상되며 누수되지 않습니다. 사용량을 제한하고 운영 체제 및 기타 프로세스를 위한 여유 메모리를 남기기 위해 max server memory를 설정합니다. 자세한 내용은 서버 메모리 구성 옵션을 참조하세요.
작업 관리자에 표시된 최대 서버 메모리와 커밋된 메모리의 차이점은 무엇인가요?
max 서버 메모리 설정은 SQL Server 버퍼 풀과 엔진 내의 대부분의 메모리 클럭이 커밋할 수 있는 메모리를 제한합니다. 작업 관리자는 전체 sqlservr.exe 프로세스에 대한 커밋된 메모리를 표시합니다. 이 보기에는 CLR, 연결된 서버 공급자, 확장 저장 프로시저 및 백업 버퍼와 같은 구성 요소가 버퍼 풀 외부에서 만드는 할당이 포함됩니다. 결과적으로 총 프로세스 메모리는 최대 서버 메모리를 초과할 수 있습니다. 자세한 내용은 메모리 관리 아키텍처 가이드를 참조하세요.
LPIM(메모리의 페이지 잠금)은 언제 사용하도록 설정해야 하나요?
OS가 SQL Server 작업 집합을 트리밍할 때 메모리에서 페이지 차단을 사용하도록 설정합니다. 이 문제는 총 서버 메모리에서 오류 17890 또는 갑작스런 하락으로 표시됩니다. 명시적 최대 서버 메모리 값과 LPIM을 페어링하여 OS 및 기타 프로세스에 RAM을 남겨 둡니다. 모든 인스턴스에서 기본적으로 LPIM을 사용하도록 설정하지 마세요. 이를 사용하여 확인된 페이징 문제를 해결합니다.
sys.dm_os_memory_clerks는 무엇을 알려 주나요?
sys.dm_os_memory_clerks SQL Server 엔진 내의 각 활성 메모리 클러크에 대해, 해당 클러크가 커밋한 메모리 양과 함께 한 행씩 반환합니다. 이를 사용하여 가장 많은 메모리를 사용하는 구성 요소(예: 버퍼 풀, 계획 캐시, 잠금 관리자 또는 쿼리 메모리 부여)를 찾고 튜닝 작업을 지시합니다.