다음을 통해 공유


MSSQLSERVER_8645

적용 대상: SQL Server

세부 정보

attribute
제품 이름 SQL Server
이벤트 ID 8645
이벤트 원본 MSSQLSERVER
구성 요소 SQLEngine
심볼 이름 MEMTIMEDOUT_ERR
메시지 텍스트 리소스 풀 '%ls'(%ld)에서 메모리 리소스가 쿼리를 실행하기를 기다리는 동안 시간이 초과되었습니다. 쿼리를 다시 실행합니다.

설명

이 오류는 SQL Server 요청이 오랜 시간 동안 쿼리 실행(QE) 메모리를 기다렸다가 메모리를 사용할 수 없는 경우에 발생합니다. 쿼리 실행 메모리는 주로 정렬 작업, 해시 작업, 대량 복사 작업 및 인덱스 만들기 및 채우기에 사용됩니다. 이러한 작업 중 하나를 수행하는 쿼리는 메모리 부여를 요청합니다. 사용할 수 있는 메모리가 없으면 메모리를 사용할 수 있게 될 때까지 쿼리가 RESOURCE_SEMAPHORE 대기하도록 설정됩니다. 20분 넘게 대기한 후에 메모리를 사용할 수 없는 경우 SQL Server는 오류 8645로 쿼리를 종료합니다. "메모리 리소스가 '기본값'에서 쿼리를 실행할 때까지 기다리는 동안 시간 초과가 발생했습니다. 시간 제한 값은 SQL Server 버전마다 약간 다릅니다. sys.dm_exec_query_memory_grants 확인하여 timeout_sec 서버 수준에서 설정된 시간 제한 값을 볼 수 있습니다.

원인

이 오류는 메모리 부여 및 해당 메모리를 사용할 수 있을 때까지의 장기간 대기와 관련하여 확인할 수 있습니다. 일반적으로 쿼리가 완료되면 사용하는 실행 메모리가 해제됩니다. 따라서 이 오류가 표시되면 시간이 초과된 쿼리가 작업을 완료하는 데 20분 넘게 다른 요청이 대기했음을 의미합니다. 사용 가능한 모든 QE 메모리를 소비하는 단일 요청이 하나만 있거나 많은 요청이 있을 수 있으며 메모리 부여가 함께 QE 메모리를 소진했을 수 있습니다. 워크로드에 이러한 장기 실행 요청이 있는 경우 실행 기간을 개선하고 사용하는 QE 메모리 양을 줄이기 위한 조치를 취해야 합니다.

사용자 작업

리소스 관리자를 사용하여 특정 워크로드의 메모리 풀을 제한하지 않는 경우 전체 서버 상태 및 워크로드를 확인할 수 있습니다. 리소스 관리자를 사용하는 경우 리소스 풀 또는 워크로드 그룹 설정을 확인합니다.

자세한 설명 및 문제 해결 단계는 SQL Server의 메모리 부여로 인한 성능 저하 또는 메모리 부족 문제 해결에 설명되어 있습니다.

다음 목록에는 앞에서 설명한 문서에 자세히 설명된 단계가 요약되어 있습니다. 이러한 단계는 QE 메모리 오류를 줄이거나 제거하는 데 도움이 될 수 있습니다.

  1. 큰 메모리 부여 또는 QE 메모리 소비자인 SQL Server의 요청을 식별합니다. 자세한 내용은 쿼리 실행 메모리에 대한 대기를 식별하는 방법을 참조 하세요.

  2. 쿼리를 다시 작성하여 정렬 및 해시 작업을 최소화하거나 방지합니다.

  3. 통계를 업데이트하고 정기적으로 업데이트하여 SQL Server에서 메모리 부여를 올바르게 예측하도록 합니다.

  4. 식별된 쿼리 또는 쿼리에 적절한 인덱스를 만듭니다. 인덱스는 처리되는 행 수를 줄여 JOIN 알고리즘을 변경하고 부여 크기를 줄이거나 완전히 제거할 수 있습니다.

  5. 가능한 경우 쿼리에서 OPTION(min_grant_percent = XX, max_grant_percent = XX) 힌트를 사용합니다.

  6. Resource Governor를 사용하여 QE 메모리 사용의 효과를 특정 워크로드로만 제한합니다.

  7. SQL Server 2017 및 2019는 적응형 쿼리 처리를 사용하여 메모리 부여 피드백 메커니즘이 런타임에 메모리 부여 크기를 동적으로 조정할 수 있도록 합니다. 이 기능은 처음에 메모리 부여 문제를 방지할 수 있습니다.

  8. SQL Server 메모리를 늘리거나 기존 설정을 조정합니다.

    1. 다음 SQL Server 메모리 구성 매개 변수를 확인합니다.

      • 최대 서버 메모리 - 필요한 경우 증가
      • 최소 서버 메모리
      • min memory per query
    2. 비정상적인 설정을 확인합니다. 필요에 따라 수정합니다. SQL Server의 증가된 메모리 요구 사항을 고려합니다. 기본 및 권장 설정은 서버 메모리 구성 옵션에 나열됩니다.

  9. OS 수준(물리적 또는 가상 RAM)에서 메모리를 늘입니다.

  10. 다른 애플리케이션 또는 서비스가 이 서버에서 메모리를 사용하는지 확인합니다. 덜 중요한 애플리케이션 또는 서비스를 다시 구성하여 메모리를 적게 사용하거나 별도의 서버로 이동합니다. 이 작업은 외부 메모리 압력을 제거할 수 있습니다.

  11. 다음 DBCC 명령을 실행하여 여러 SQL Server 메모리 캐시(임시 측정값)를 해제합니다.

  • DBCC FREESYSTEMCACHE
  • DBCC FREESESSIONCACHE
  • DBCC FREEPROCCACHE