KB3074434: SQL Server 프로세스의 가상 주소 공간에 사용 가능한 메모리가 매우 낮을 때 메모리가 부족 함 오류가 발생 함

이 업데이트를 적용 한 후에는 trace flag-T8075 를 시작 매개 변수로 추가 하 여이 변경 내용을 사용 하도록 설정 해야 합니다.

증상

64 비트 버전의 Microsoft SQL Server 2012에서 쿼리를 실행 하면 SQL Server 오류 로그에 다음과 유사한 메모리 부족 오류 메시지가 표시 됩니다.

페이지 할당 실패: FAIL_PAGE_ALLOCATION 513

쿼리는 실행을 완료 하는 데 시간이 오래 걸리고 SOS_MEMORY_TOPLEVELBLOCKALLOCATOR 대기 합니다. 다음 정보 지점을 검사 하면 사용 가능한 가상 주소 공간이 매우 부족 하다는 것을 알 수 있습니다.

  • DBCC MEMORYSTATUS-프로세스/시스템 개수 섹션-사용 가능한 가상 메모리

  • DMV: sys.dm_os_process_memory 열 virtual_address_space_available_kb

이러한 값은 x64 프로세스에서 8 테라바이트 (TB)를 중심으로 시작 하 여 몇 기가바이트 (GB)에 도달 하는 동안 계속 됩니다.  사용 가능한 가상 주소 공간이 매우 낮은 경우 메모리 할당을 수행 하려고 하는 쿼리는 CMEMTHREAD의 대기 유형을 만날 수도 있습니다. 다음 데이터 요소는 시간에 따라 계속 증가 합니다.

  • DMV: sys.dm_os_process_memory 및 sys.dm_os_memory_nodes 열 virtual_address_space_reserved_kb

  • DBCC MEMORYSTATUS-메모리 관리자 섹션-VM 예약 됨

일반적으로 이러한 값은 거의 8 TB까지 "최대 서버 메모리" 값의 배수로 증가 합니다.

원인

SQL Server 프로세스에서 총 서버 메모리 (대상 서버 메모리)가 상태인 상태에 도달 했을 때, SQL Server 메모리 관리자에 새 할당이 여러 8kb 페이지를 임시로 성공적으로 요청 하도록 하는 정책이 있습니다. 이러한 조건에서 반복 되는 할당 패턴으로 인해 가상 주소 공간의 메모리 블록 및 소비가 조각화 될 수 있습니다. 이 프로세스가 여러 번 반복 되는 경우 SQL Server 가상 주소 공간이 모두 소모 되 고 앞에서 설명한 현상이 표시 됩니다.

해결 방법

누적 업데이트 정보

이 문제는 다음 SQL Server 누적 업데이트에서 처음 수정 되었습니다.

 

각각의 새로운 새 누적 업데이트에는 이전 누적 업데이트에 포함 된 모든 핫픽스와 모든 보안 수정 사항이 포함 되어 있습니다. SQL Server에 대 한 최신 누적 업데이트를 다운로드 하 여 설치 하는 것이 좋습니다.

이 핫픽스는 메모리가 부족 하 고 사용자가 겪을 수 있는 사용 가능한 가상 주소 공간을 지속적으로 줄이는 것을 방지 합니다.

상태

Microsoft는 "적용 대상" 절에 나열한 제품에서 이 문제를 확인했습니다.

추가 정보

  • Windows 2012 R2에서는 가상 주소 공간이 128 TB 만큼 커질 수 있습니다. 따라서 Windows 2012 R2 환경에서는이 문제를 볼 수 없습니다. 자세한 내용은 Windows 개발자 센터에서windows 및 Windows Server 릴리스의 메모리 제한 에 따라 다음 항목을 참조 하세요.

  • 픽스를 적용 한 후에도 가상 주소 공간에 지속적으로 증가가 표시 되는 경우 Page_allocated 확장 이벤트를 사용 하 여 많은 메모리를 요청 하는 쿼리 또는 작업을 확인할 수 있습니다. 예제 스크립트는 다음과 같습니다.

    CREATE EVENT SESSION [memory_tracking] ON SERVERADD EVENT sqlos.page_allocated(    ACTION(package0.callstack,sqlos.cpu_id,sqlos.task_address,sqlos.worker_address,sqlserver.database_id,sqlserver.query_hash,sqlserver.request_id,sqlserver.session_id,sqlserver.sql_text)    WHERE ([number_pages]>(1)))ADD TARGET package0.event_file(SET filename=N'E:\Data\MSSQL11.MSSQLSERVER\MSSQL\Log\memory_tracking.xel')WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=PER_CPU,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF)GO

    일반적으로 이러한 로그 백업 및 인덱스 유지 관리 작업을 자주 수행 합니다.

추가 도움이 필요하신가요?

기술 향상
교육 살펴보기
새로운 기능 우선 가져오기
Microsoft Insider 참가

이 정보가 유용한가요?

소중한 의견에 감사드립니다.

피드백을 주셔서 감사합니다. Office 지원 에이전트와 연락하는 것이 도움이 될 것 같습니다.

×