MSSQLSERVER_17890

적용 대상: 예SQL Server(지원되는 모든 버전)

세부 정보

attribute
제품 이름 SQL Server
이벤트 ID 17890
이벤트 원본 MSSQLSERVER
구성 요소 SQLEngine
심볼 이름 SRV_WS_TRIMMED
메시지 텍스트 SQL Server 프로세스 메모리의 주요 부분이 페이지 아웃되었습니다. 이로 인해 성능이 저하될 수 있습니다. 기간: %d초, 작업 집합(KB): %I64d, 커밋(KB): %I64d, 메모리 사용률: %d%%.

설명

SQL Server 오류 로그 또는 Windows 애플리케이션 이벤트 로그에 다음과 같은 오류 메시지가 나타날 수 있습니다.

SQL Server 프로세스 메모리의 주요 부분이 페이지 아웃되었습니다. 이로 인해 성능이 저하될 수 있습니다. 기간: 0초 작업 집합(KB): 3383250, 커밋(KB): 9112480, 메모리 사용률: 37%.

또한 SQL Server에 대한 쿼리 실행 및 다른 모든 작업에서 갑자기 성능이 저하될 수도 있습니다.

원인

SQL Server는 SQL Server 프로세스에 대한 다양한 메모리 관련 정보를 모니터링합니다. 이 경우에는 프로세스의 작업 집합이 커밋된 프로세스 메모리의 50% 미만인 것을 감지했습니다. 이로 인해 이 경고가 출력된 것입니다. 이 경고가 발생하는 일반적인 원인은 다음과 같습니다.

  • 운영 체제가 SQL Server 커밋된 메모리의 상당 부분을 페이징 파일로 페이지 아웃합니다.
  • 이는 다른 애플리케이션 또는 운영 체제에서 메모리 요구가 급증하여 발생할 수 있습니다.
  • 특정 디바이스 드라이버가 필요에 따라 연속 메모리 할당을 요청하는 경우에도 이 문제가 발생할 수 있습니다.

사용자 조치

실제 메모리의 버퍼 풀에 할당된 메모리를 잠가 Windows 운영 체제에서 SQL Server 프로세스의 버퍼 풀 메모리를 페이징 아웃할 수 없도록 할 수 있습니다. 메모리를 잠그려면 메모리의 페이지 잠금 사용자 권한을 SQL Server 서비스의 시작 계정으로 사용되는 사용자 계정에 할당합니다. 그러나 이 해결 방법을 구현하기 전에 SQL Server 메모리를 페이징 아웃할 수 있는 원인 및 중요한 고려 사항을 검토한 다음 SQL Server 인스턴스에 대한 "메모리의 페이지 잠금" 사용자 권한을 할당해야 합니다.

참고

메모리의 페이지 잠금을 사용하면 SQL Server에서 관리하는 메모리가 페이징 아웃되지 않도록 할 수 있습니다. 그러나 스레드 스택, EXE 및 DLL 이미지, 힙 메모리, CLR 메모리는 계속해서 OS에 의해 페이징 아웃될 수 있습니다.

SQL Server 2008 SP1 누적 업데이트 2부터 SQL Server Standard 및 Enterprise Edition 모두 메모리의 페이지 잠금 사용자 권한을 사용할 수 있습니다. 잠긴 페이지 지원에 대한 자세한 내용은 KB970070 - SQL Server Standard Edition(64 비트) 시스템에서 잠긴 페이지 지원을 참조하세요.

메모리의 페이지 잠금 사용자 권한을 할당하려면 다음 단계를 수행합니다.

  1. 시작, 실행 을 차례로 클릭한 다음 gpedit.msc 를 입력하고 확인 을 클릭합니다.
  2. 그룹 정책 대화 상자가 나타납니다.
  3. 컴퓨터 구성 를 확장하고 Windows 설정 을 확장합니다.
  4. 보안 설정 을 확장한 다음 로컬 정책 을 확장합니다.
  5. 사용자 권한 할당을 클릭한 다음 메모리의 페이지 잠금 을 두 번 클릭합니다.
  6. 로컬 보안 정책 설정 대화 상자에서 사용자 또는 그룹 추가 를 클릭합니다.
  7. 사용자 또는 그룹 선택 대화 상자에서 Sqlservr.exe 파일을 실행할 수 있는 권한이 있는 계정을 추가하고 확인 을 클릭합니다.
  8. 그룹 정책 대화 상자를 닫습니다.
  9. SQL Server 서비스를 다시 시작합니다.

메모리의 페이지 잠금 사용자 권한을 할당하고 SQL Server 서비스를 다시 시작하면 Windows 운영 체제는 더 이상 SQL Server 프로세스 내의 버퍼 풀 메모리를 페이징 아웃하지 않습니다. 그러나 Windows 운영 체제가 SQL Server 프로세스 내의 비 버퍼 풀 메모리는 계속 사용할 수 있습니다.

시작 시 SQL Server 오류 로그에 다음 메시지가 기록되었는지 확인하여 SQL Server 인스턴스에서 사용자 권한이 사용되는지 확인할 수 있습니다. "버퍼 풀에 잠긴 페이지를 사용하고 있습니다."

이 메시지는 SQL Server에만 적용됩니다. 오류 로그에 기록되는 이 메시지에 대한 자세한 내용은 다음을 참조하세요. 로컬 시스템에서 메모리의 페이지 잠금 권한을 할당해야 하나요?

Windows 운영 체제가 비 버퍼 풀 메모리를 페이징 아웃하면 여전히 성능 문제가 발생할 수 있습니다. 그러나 "설명" 섹션에서 설명한 오류 메시지는 SQL Server 오류 로그에 기록되지 않습니다.

SQL Server 메모리를 페이징 아웃할 수 있는 원인

이 문제를 발생시킬 수 있는 세 가지 광범위한 문제 범주가 있습니다.

  • 애플리케이션 관련 문제: 여러 애플리케이션이 함께 사용 가능한 실제 메모리를 소진하여 OS가 새 애플리케이션의 리소스 요청을 위해 일부 메모리를 해제해야 합니다. 일반적으로 이 경우에는 메모리를 소모하는 애플리케이션을 찾고 RAM 고갈 없이 메모리를 분산하는 데 필요한 단계를 수행합니다.
  • 디바이스 드라이버 문제: 드라이버가 메모리 할당 함수를 잘못 호출하는 경우 디바이스 드라이버 때문에 모든 프로세스의 작업 집합 페이징이 발생할 수 있습니다.
  • 운영 체제 문제

아래에서 이러한 각 범주에 대한 정보를 찾을 수 있습니다.

  • 애플리케이션 관련 문제: 여러 애플리케이션이 함께 시스템의 모든 RAM을 사용할 수 있습니다. 새로운 메모리 요청이 생성되면 OS는 이를 충족하려고 시도하고, 사용 가능한 메모리가 없는 경우 메모리 요청을 충족하기 위해 실행 중인 애플리케이션의 작업 집합을 트리밍합니다. 이 경우 대부분의 애플리케이션의 작업 집합이 상당히 감소하는 것을 볼 수 있습니다. 이를 확인하려면 시스템의 모든 애플리케이션에 대해 다음 성능 모니터 카운터를 수집합니다.

    • 성능 개체: Process
    • 카운터: 작업 집합

    또한 다음 카운터를 모니터링하여 시스템에서 사용할 수 있는 실제 메모리와의 상관 관계를 확인합니다.

    • 성능 개체: 메모리
    • 카운터: 사용 가능한 메모리(MB)

    관찰할 수 있는 일반적인 동작은 사용 가능한 메모리가 0MB 가까이로 줄어들면서 시스템에서 대부분의(모든) 프로세스에 대한 작업 집합 카운터가 동시에 급락하는 것입니다. 이러한 동작이 관찰되는 경우 시스템에서 메모리 사용량을 줄이는 조치를 수행해야 합니다. 예를 들어 SQL Server에 대한 최대 서버 메모리를 줄일 수 있습니다.

    애플리케이션이 시스템 캐시를 너무 많이 사용하여 시스템 캐시가 크게 증가한 것일 수도 있습니다. 시스템 캐시 증가에 대응하기 위해 시스템은 SQL Server 프로세스 또는 다른 애플리케이션의 작업 집합을 페이징 아웃합니다. 이 문제가 발생하는 경우 애플리케이션에서 몇몇 메모리 관리 함수를 사용할 수 있습니다. 이러한 함수는 애플리케이션에서 파일 I/O 작업이 사용할 수 있는 시스템 캐시 공간을 제어합니다. 예를 들어 SetSystemFileCacheSize 함수와 GetSystemFileCacheSize 함수를 사용하여 파일 I/O 작업이 사용할 수 있는 시스템 캐시 공간을 제어할 수 있습니다.

    메모리 성능 개체를 사용하여 이 개체에 있는 다양한 카운터의 값을 확인하고 시스템 캐시 작업 집합이 너무 많은 메모리를 사용하는지 여부를 판단할 수 있습니다. 예를 들어 캐시 바이트 및 시스템 캐시 상주 바이트 카운터를 확인할 수 있습니다. 이 항목에 대한 자세한 내용은 다음을 참조하세요.

    "Microsoft Windows Dynamic Cache Service"를 다운로드하고 배포하여 시스템 캐시에 사용되는 메모리를 제어할 수 있습니다.

  • 디바이스 드라이버 문제: 디바이스 드라이버가 MmAllocateContiguousMemory 함수를 사용하고 HighestAcceptableAddress 매개 변수의 값을 4GB 미만으로 설정하는 경우 Windows 운영 체제는 SQL Server 프로세스를 포함하여 시스템에서 프로세스의 작업 집합을 페이징 아웃할 수 있습니다. 이 문제를 해결하려면 디바이스 드라이버 공급업체에 드라이버 업데이트를 문의하세요.

    디바이스 드라이버가 메모리를 할당하려고 하면 Windows 운영 체제가 다른 애플리케이션의 작업 집합을 페이징 아웃할 수 있습니다. 이 Windows 핫픽스를 사용하면 이벤트 추적을 사용하여 문제를 일으킨 디바이스 드라이버를 찾을 수 있습니다. 작업 집합 트리밍 동작을 유발하는 특정 드라이버에 대한 자세한 정보를 확인하려면 연속 메모리를 할당하는 드라이버 식별을 참조하세요.

  • 운영 체제 문제: Windows 운영 체제가 SQL Server 프로세스의 작업 집합을 페이징 아웃하도록 하는 알려진 문제를 해결하려면 다음 Microsoft 기술 자료 문서에 설명된 핫픽스를 적용하세요.

    참고

    핫픽스는 누적됩니다. 최신 버전의 핫픽스에는 해당 핫픽스의 이전 버전이 포함되어 있습니다.

"메모리의 페이지 잠금" 사용자 권한을 할당하기 전의 중요한 고려 사항

메모리의 페이지 잠금 사용자 권한을 할당하기 전에 추가로 고려해야 할 사항이 있습니다. 잘못 구성된 시스템에 이 사용자 권한을 할당하면 시스템이 불안정해질 수도 있고 전체 시스템의 성능이 저하될 수도 있습니다. 또한 이벤트 로그에 이벤트 ID 333이 기록될 수 있습니다.

Microsoft CSS(고객 지원 서비스)에 이러한 문제를 문의할 경우 CSS 엔지니어가 SQL Server 서비스의 시작 계정으로 사용되는 사용자 계정에서 이 사용자 권한을 취소하도록 요청할 수 있습니다. 이 조치는 CSS 엔지니어가 SQL Server 및 시스템에서 실행되는 다른 애플리케이션에 필요한 다양한 옵션을 구성하는 데 사용할 수 있는 중요한 성능 데이터를 수집하는 데 필요할 수 있습니다. CSS 엔지니어가 성능 데이터를 수집한 후에는 SQL Server 서비스의 시작 계정에 메모리의 페이지 잠금 사용자 권한을 할당할 수 있습니다.

메모리의 페이지 잠금 사용자 권한을 할당하기 전에 시스템에 설치된 다양한 애플리케이션 및 서비스의 메모리 요구 사항을 확인할 수 있도록 성능 모니터 로그를 캡처해야 합니다. 이러한 애플리케이션에는 SQL Server도 포함됩니다. 메모리 요구 사항을 확인하려면 다음 기준 정보를 수집합니다.

  • 최대 서버 메모리 옵션 및 최소 서버 메모리 옵션을 올바르게 설정했는지 확인합니다. 이러한 옵션은 SQL Server 프로세스의 버퍼 풀에 대한 메모리 요구 사항만을 반영하며, SQL Server 프로세스 내의 다른 구성 요소에 할당된 메모리는 포함되지 않습니다. 이러한 구성 요소에는 다음이 포함됩니다.

    • SQL Server 작업자 스레드
    • SQL Server 프로세스가 SQL Server 프로세스의 주소 공간 내에서 로드하는 다양한 DLL 및 구성 요소
    • 백업 및 복원 작업
  • DLL 및 구성 요소에는 sp_OACreate 저장 프로시저, 연결된 서버 및 SQL Server CLR에 사용되는 다양한 OLE DB 공급자, 확장 저장 프로시저, Microsoft COM 개체가 포함됩니다. 이러한 구성 요소에 할당된 메모리는 SQL Server 프로세스의 주소 공간에서 비 버퍼 풀 영역에 속합니다. 전체 SQL Server 프로세스가 사용할 수 있는 최대 메모리 양을 적절히 결정하려면 SQL Server 프로세스에 사용하려는 총 메모리에서 버퍼 풀을 사용하지 않는 구성 요소에 할당된 메모리를 빼야 합니다. 그런 다음 나머지 값을 사용하여 최대 서버 메모리 옵션을 설정할 수 있습니다. 최대 서버 메모리 옵션 및 최소 서버 메모리 옵션을 설정하기 전에 SQL Server 온라인 설명서의 "메모리 옵션 수동 설정" 항목을 신중하게 검토해야 합니다.

  • 다른 애플리케이션 및 Windows 운영 체제 구성 요소의 메모리 요구 사항을 확인합니다. 애플리케이션에는 SQL Server Agent, SQL Server Replication Agents, SQL Server Reporting Services, SQL Server Analysis Services, SQL Server Integration Services, SQL Server Full Text Search 등의 다른 SQL Server 구성 요소가 포함될 수 있습니다. 백업 작업 및 파일 복사 작업을 수행하는 애플리케이션은 많은 메모리를 사용할 수 있습니다. 대량 복사 및 파일 IO를 생성하는 스냅샷 에이전트와 같은 작업을 고려합니다. 최대 서버 메모리 옵션 및 최소 서버 메모리 옵션의 값을 결정할 때 이러한 모든 애플리케이션의 메모리 요구 사항을 고려해야 합니다. 모든 프로세스에 대한 프로세스 개체에서 전용 바이트 카운터 및 작업 집합 카운터를 사용하여 특정 프로세스의 메모리 요구 사항을 확인할 수 있습니다.

  • 기본적으로 메모리의 페이지 잠금 사용자 권한은 기본 제공되는 로컬 시스템 계정에 이미 할당되어 있습니다. 자세한 내용은 다음 Microsoft 웹 사이트를 방문하세요. 로컬 시스템에서 메모리의 페이지 잠금 권한을 할당해야 하나요?

  • 도메인의 모든 SQL Server 프로세스에 대해 전역적으로 Windows 사용자 계정을 사용하는 경우 그룹 정책 구성을 사용하여 할당된 사용자 권한을 결정합니다. 32비트 SQL Server 프로세스에서는 이 계정을 시작 계정으로 사용할 수 있습니다. 그러나 이 계정에는 AWE(Address Windowing Extensions) 기능을 사용하도록 설정하기 위해 메모리의 페이지 잠금 사용자 권한이 필요합니다. 자세한 내용은 SQL Server 온라인 설명서의 "SQL Server 최대 메모리 양 제공" 항목을 참조하세요.

  • 여러 SQL Server 인스턴스에 대한 최대 서버 메모리 옵션 및 최소 서버 메모리 옵션을 구성하기 전에 각 SQL Server 인스턴스의 비 버퍼 풀 메모리 요구 사항을 고려해야 합니다. 그런 다음 각 SQL Server 인스턴스에서 이러한 옵션을 구성합니다.

이 기준 정보를 피크 부하 중에 수집하는 것이 가장 좋습니다. 따라서 다양한 애플리케이션 및 구성 요소에서 피크 부하를 지원하기 위한 메모리 요구 사항을 확인할 수 있습니다. 메모리 요구 사항은 시스템에서 실행되는 애플리케이션 및 작업에 따라 시스템마다 다릅니다. 동적 관리 뷰 sys.dm_os_process_memory에서 제공하는 정보를 쿼리하여 시스템에 메모리 부족 상태가 발생하는지 여부를 파악할 수 있습니다. 자세한 내용은 sys.dm_os_process_memory(Transact-SQL)를 참조하세요.

Windows Server 2008 및 R2 버전에 추가된 개선 사항

Windows Server 2008 및 Windows Server 2008 R2에서는 연속 메모리 할당 메커니즘이 개선되었습니다. 이 기능 개선을 통해 Windows Server 2008 및 Windows Server 2008 R2는 새 메모리 요청이 도달했을 때 애플리케이션의 작업 집합을 페이징 아웃하는 효과를 특정 범위로 줄일 수 있습니다.

다음은 Microsoft 백서 "Advances in Memory Management in Windows"에 수록된 기능 개선에 대한 설명입니다.

Windows Server 2008에서는 물리적으로 인접한 메모리의 할당이 크게 향상되었습니다. 메모리 관리자는 이제 대부분의 경우 작업 집합을 트리밍하거나 I/O 작업을 수행하지 않고 페이지를 동적으로 대체하기 때문에 연속 메모리 할당 요청이 성공할 가능성이 훨씬 높아집니다. 게다가 이제는 커널 스택 및 파일 시스템 메타데이터 페이지와 같은 다른 많은 유형의 페이지를 대체에 사용할 수 있습니다. 따라서 특정 시점에 더 많은 연속 메모리를 사용할 수 있습니다. 또한 이러한 할당을 확보하는 비용이 크게 줄어들었습니다.

자세한 내용은 SQL Server 작업 집합 트리밍 문제를 참조하세요.

이 문서에서 설명하는 타사 제품은 Microsoft가 아닌 회사에서 제조되었습니다. Microsoft는 이러한 제품의 성능에 대한 어떠한 묵시적 또는 다른 형태의 보증도 하지 않습니다.