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 버전 모두 메모리 사용자 권한의 잠금 페이지를 사용할 수 있습니다. 잠긴 페이지에 대한 지원에 대한 자세한 내용은 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에만 적용됩니다. ERRORLOG에서 이 메시지에 대한 자세한 내용은 다음 을 참조하세요. 로컬 시스템에서 메모리 권한에 대한 잠금 페이지를 할당해야 하나요?

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

SQL Server 메모리가 페이징되는 원인

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

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

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

  • 애플리케이션 관련 문제: 애플리케이션이 함께 시스템의 모든 RAM을 사용할 수 있습니다. 메모리에 대한 새 요청이 만들어지면 OS는 이를 충족하려고 시도하고, 사용 가능한 메모리가 없는 경우 메모리 요청을 충족하도록 실행 중인 애플리케이션의 작업 집합을 트리밍합니다. 이러한 경우 모든 애플리케이션이 크게 떨어지지 않을 경우 대부분의 작업 집합이 크게 삭제되는 것을 관찰할 수 있습니다. 이를 확인하려면 시스템의 모든 애플리케이션에 대해 다음 성능 모니터 카운터를 수집합니다.

    • 성능 개체: 프로세스
    • 카운터: 작업 집합

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

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

    관찰할 수 있는 일반적인 동작은 사용 가능한 메모리를 0MB에 가깝게 줄이는 동시에 시스템의 대부분의(모든) 프로세스에 대해 작업 집합 카운터가 갑자기 감소하는 것입니다. 이러한 동작을 관찰하는 경우 시스템의 메모리 사용량을 줄이기 위한 조치를 취해야 할 수 있습니다. 예를 들어 SQL Server에 대한 최대 서버 메모리 감소가 포함됩니다.

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

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

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

  • 디바이스 드라이버 문제: 디바이스 드라이버가 함수를 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 및 구성 요소에는 다양한 OLE DB 공급자, 확장 저장 프로시저, sp_OACreate 저장 프로시저에 사용되는 Microsoft COM 개체, 연결된 서버 및 SQL Server CLR이 포함됩니다. 이러한 구성 요소에 할당된 메모리는 SQL Server 프로세스의 주소 공간의 비버퍼 풀 영역에 속합니다. 전체 SQL Server 프로세스에서 사용할 수 있는 최대 메모리 양을 결정하려면 SQL Server 프로세스에서 사용할 총 메모리에서 버퍼 풀을 사용하지 않는 구성 요소에 할당된 메모리를 빼야 합니다. 그런 다음 나머지 값을 사용하여 최대 서버 메모리 옵션을 설정할 수 있습니다. 최대 서버 메모리 옵션 및 최소 서버 메모리 옵션을 설정하기 전에 SQL Server 온라인 설명서의 "수동으로 메모리 옵션 설정" 항목을 주의 깊게 검토해야 합니다.

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

  • 기본적으로 메모리 사용자 권한의 잠금 페이지는 기본 제공 로컬 시스템 계정에 이미 할당되어 있습니다. 자세한 내용은 다음 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 백서 "Windows의 메모리 관리 발전"의 향상된 기능에 대한 설명입니다.

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

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

이 문서에 나와 있는 다른 공급업체 제품은 Microsoft와 무관한 회사에서 제조한 것입니다. Microsoft는 이들 제품의 성능이나 안정성에 관하여 명시적이든 묵시적이든 어떠한 보증도 하지 않습니다.