Microsoft로 로그인
로그인하거나 계정을 만듭니다.
안녕하세요.
다른 계정을 선택합니다.
계정이 여러 개 있음
로그인할 계정을 선택합니다.

이 업데이트를 적용 한 후에는 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 제품과 서비스를 개선하는 데 사용됩니다. IT 관리자는 이 데이터를 수집할 수 있습니다. 개인정보처리방침

의견 주셔서 감사합니다!

×