다음을 통해 공유


메모리 부족 문제 해결

SQL Server In-Memory OLTP는 SQL Server와 다른 방법으로 더 많은 메모리를 사용합니다. 요구 사항의 증가에 따라 메모리 내 OLTP에 대해 설치하고 할당한 메모리의 양이 불충분해질 수 있습니다. 이 경우 메모리가 부족해질 수 있습니다. 이 항목에서는 OOM 상황에서 복구하는 방법을 설명합니다. 여러 OOM 상황을 방지하는 데 도움이 될 수 있는 지침은 메모리 사용량 모니터링 및 문제 해결 을 참조하세요.

이 주제에서 다루는 내용

주제 개요
OOM으로 인한 데이터베이스 복원 실패 해결 "'<resourcePoolName>' 리소스 풀의 메모리 부족으로 인해 '<databaseName>' 데이터베이스에 대한 복원 작업이 실패했습니다"라는 오류 메시지가 나타나는 경우 수행할 작업입니다.
메모리 부족 또는 OOM 상황이 작업에 미치는 영향 해결 메모리 부족 문제가 성능에 부정적인 영향을 미치고 있음을 발견할 경우 수행할 작업입니다.
사용 가능한 메모리가 충분한 경우 메모리 부족으로 인한 페이지 할당 오류 해결 오류 메시지 "리소스 풀 '<resourcePoolName>'의 메모리 부족으로 인해 데이터베이스 '<databaseName>'에 페이지 할당이 금지되었습니다."가 발생했을 때의 해결 방법은 다음과 같습니다. 메모리가 충분할 때 수행할 작업입니다.

OOM으로 인한 데이터베이스 복원 실패 해결

데이터베이스를 복원하려고 하면 "리소스 풀 '<resourcePoolName>'의 메모리 부족으로 인해 데이터베이스 '<databaseName>'에 대한 복원 작업이 실패했습니다."라는 오류 메시지가 표시될 수 있습니다. 데이터베이스를 성공적으로 복원하려면 먼저 더 많은 메모리를 사용할 수 있도록 하여 메모리 부족 문제를 해결해야 합니다.

OOM으로 인한 복구 실패를 해결하기 위해 이러한 수단을 사용하여 사용 가능한 메모리를 늘리면 복구 작업에 사용할 수 있는 메모리가 일시적으로 증가합니다.

  • 실행 중인 애플리케이션을 일시적으로 닫습니다.
    Visual Studio, Internet Explorer, OneNote 등 하나 이상의 실행 중인 애플리케이션을 닫으면 사용하던 메모리를 복원 작업에 사용할 수 있게 됩니다. 복원에 성공한 후 다시 시작할 수 있습니다.

  • MAX_MEMORY_PERCENT의 값을 늘립니다.
    이 코드 조각은 리소스 풀 PoolHk의 MAX_MEMORY_PERCENT를 설치된 메모리의 70%로 변경합니다.

    중요합니다

    서버가 VM에서 실행 중이고 전용 서버가 아니면 MIN_MEMORY_PERCENT 값을 MAX_MEMORY_PERCENT와 동일한 값으로 설정합니다.
    자세한 내용은 모범 사례: VM 환경에서 메모리 내 OLTP 사용 항목을 참조하세요.

    
    -- disable resource governor  
    ALTER RESOURCE GOVERNOR DISABLE  
    
    -- change the value of MAX_MEMORY_PERCENT  
    ALTER RESOURCE POOL PoolHk  
    WITH  
         ( MAX_MEMORY_PERCENT = 70 )  
    GO  
    
    -- reconfigure the Resource Governor  
    --    RECONFIGURE enables resource governor  
    ALTER RESOURCE GOVERNOR RECONFIGURE  
    GO  
    
    

    MAX_MEMORY_PERCENT 최대값에 대한 자세한 내용은 메모리 최적화 테이블 및 인덱스에 사용할 수 있는 메모리 백분율 항목 섹션을 참조하세요.

  • 최대 서버 메모리를 다시 구성합니다.
    최대 서버 메모리를 구성하는 방법에 대한 자세한 내용은 메모리 구성 옵션을 사용하여 서버 성능 최적화 항목을 참조하세요.

메모리 부족 또는 OOM 상황이 작업에 미치는 영향 해결

물론 메모리가 부족하거나 OOM(메모리 부족) 상황에 빠지지 않는 것이 가장 좋습니다. 적절한 계획과 모니터링을 통해 OOM 상황을 방지할 수 있습니다. 여전히 최고의 계획으로도 실제로 일어나는 일을 항상 예측하지는 못하며 낮은 메모리 또는 OOM 상황이 발생할 수 있습니다. 다음 두 가지 방법으로 OOM에서 복구할 수 있습니다.

  1. DAC(관리자 전용 연결) 열기

  2. 정정 작업 수행

DAC(관리자 전용 연결) 열기

Microsoft SQL Server는 전용 DAC(관리자 연결)를 제공합니다. DAC를 사용하면 서버가 다른 클라이언트 연결에 응답하지 않는 경우에도 관리자가 SQL Server 데이터베이스 엔진 실행 인스턴스에 액세스하여 서버의 문제를 해결할 수 있습니다. DAC는 sqlcmd 유틸리티 및 SQL Server Management Studio(SSMS)를 통해 사용할 수 있습니다.

sqlcmd 및 DAC 사용법에 대한 지침은 전용 관리자 연결을 참조하세요. SSMS를 통해 DAC를 사용하는 방법에 대한 지침은 방법: SQL Server Management Studio에서 전용 관리자 연결 사용

정정 작업 수행

OOM 조건을 해결하려면 사용량을 줄여 기존 메모리를 확보하거나 메모리 내 테이블에서 더 많은 메모리를 사용할 수 있도록 해야 합니다.

기존 메모리 확보

불필요한 메모리 최적화 테이블 행을 삭제하고 가비지 컬렉션을 기다립니다.

메모리 최적화 테이블에서 필수가 아닌 행을 제거할 수 있습니다. 가비지 수집기는 이러한 행에서 사용하는 메모리를 사용 가능한 메모리로 반환합니다. . 메모리 내 OLTP 엔진은 가비지 행을 공격적으로 정리합니다. 그러나 장기 트랜잭션은 가비지 수집을 방해할 수 있습니다. 예를 들어 5분 동안 실행되는 트랜잭션이 있는 경우 트랜잭션이 활성 상태인 동안 업데이트/삭제 작업으로 인해 생성된 행 버전은 가비지 수집이 불가능합니다.

하나 이상의 행을 디스크 기반 테이블로 이동

다음 TechNet 문서에서는 메모리 최적화 테이블에서 디스크 기반 테이블로 행을 이동하는 방법에 대한 지침을 제공합니다.

사용 가능한 메모리 늘리기

리소스 풀에서 MAX_MEMORY_PERCENT의 값 늘리기

메모리 내 테이블에 대해 명명된 리소스 풀을 만들지 않은 경우 이를 수행하고 메모리 내 OLTP 데이터베이스를 바인딩해야 합니다. 메모리 내 OLTP 데이터베이스를 만들고 리소스 풀에 바인딩하는 방법에 대한 지침은 메모리 최적화 테이블이 있는 데이터베이스를 리소스 풀에 바인딩 항목을 참조하세요.

메모리 내 OLTP 데이터베이스가 리소스 풀에 바인딩된 경우 풀에서 액세스할 수 있는 메모리 비율을 늘릴 수 있습니다. 리소스 풀의 MIN_MEMORY_PERCENT 및 MAX_MEMORY_PERCENT 값을 변경하는 방법에 대한 지침은 하위 항목 기존 풀의 MIN_MEMORY_PERCENT 및 MAX_MEMORY_PERCENT 변경을 참조하세요.

MAX_MEMORY_PERCENT의 값을 늘립니다.
이 코드 조각은 리소스 풀 PoolHk의 MAX_MEMORY_PERCENT를 설치된 메모리의 70%로 변경합니다.

중요합니다

서버가 VM에서 실행 중이고 전용 서버가 아니면 MIN_MEMORY_PERCENT 및 MAX_MEMORY_PERCENT의 값을 동일하게 설정합니다.
자세한 내용은 모범 사례: VM 환경에서 메모리 내 OLTP 사용 항목을 참조하세요.

  
-- disable resource governor  
ALTER RESOURCE GOVERNOR DISABLE  
  
-- change the value of MAX_MEMORY_PERCENT  
ALTER RESOURCE POOL PoolHk  
WITH  
     ( MAX_MEMORY_PERCENT = 70 )  
GO  
  
-- reconfigure the Resource Governor  
--    RECONFIGURE enables resource governor  
ALTER RESOURCE GOVERNOR RECONFIGURE  
GO  
  

MAX_MEMORY_PERCENT의 최대값에 대한 자세한 내용은 항목 섹션 메모리 최적화 테이블 및 인덱스에 사용 가능한 메모리 비율을 참조하세요.

추가 메모리 설치

궁극적으로 최상의 솔루션은 가능한 경우 실제 메모리를 추가로 설치하는 것입니다. 이렇게 하면 SQL Server에 더 많은 메모리가 필요하지 않으므로 MAX_MEMORY_PERCENT 값도 늘릴 수 있으며(하위 항목 기존 풀의 MIN_MEMORY_PERCENT 및 MAX_MEMORY_PERCENT 변경 참조) 리소스 풀에 새로 설치된 메모리를 모두 사용할 수 없는 경우 최대한 활용할 수 있습니다.

중요합니다

서버가 VM에서 실행 중이고 전용 서버가 아니면 MIN_MEMORY_PERCENT 및 MAX_MEMORY_PERCENT의 값을 동일하게 설정합니다.
자세한 내용은 모범 사례: VM 환경에서 메모리 내 OLTP 사용 항목을 참조하세요.

사용 가능한 메모리가 충분한 경우 메모리 부족으로 인한 페이지 할당 오류 해결

"오류 메시지, 즉 '리소스 풀 '<resourcePoolName>'의 메모리 부족으로 데이터베이스 '<databaseName>'에 대한 페이지 할당을 허용하지 않습니다'를 받는 경우." 자세한 내용은 'https://go.microsoft.com/fwlink/?LinkId=330673'을 참조하세요." 사용 가능한 실제 메모리가 페이지를 할당하기에 충분한 경우 오류 로그에서 리소스 관리자를 사용하지 않도록 설정했을 수 있습니다. Resource Governor를 사용하지 않도록 설정하면 MEMORYBROKER_FOR_RESERVE가 인공 메모리 압력을 유발합니다.

이 오류를 해결하려면 리소스 관리자를 사용하도록 설정해야 합니다.

한도 및 제한에 대한 정보와 개체 탐색기, Resource Governor 속성 또는 Transact-SQL을 사용하여 Resource Governor를 사용하도록 설정하는 방법에 대한 지침은 Resource Governor 사용을 참조하세요.

또한 참조하십시오

메모리 내 OLTP에 대한 메모리 관리
메모리 사용량 모니터링 및 문제 해결
메모리 최적화 테이블이 있는 데이터베이스를 리소스 풀에 연결
모범 사례: VM 환경에서 In-Memory OLTP 사용