SQL Server 2008 R2“고스트 메모리”?


12

메모리 문제가 발생하는 전용 SQL Server 2008 R2 시스템이 있습니다. 시스템 자체에는 2 개의 쿼드 코어 프로세서, 16GB RAM 및 64 비트 Windows Server 2008 R2 Enterprise (Dell PowerEdge 2950)를 포함하여 많은 리소스가 있습니다. .

이상한 문제는 시스템이 사용중인 메모리의 82 %를보고하지만 sqlservr.exe는 사용중인 155mb 만보고한다는 것입니다. SQL Server가 문제라고 생각하는 이유는 sqlservr.exe 프로세스를 다시 시작하면 일정 시간 동안 메모리 소비가 정상으로 돌아 오기 때문입니다.

누구 든지이 문제를 추적하기 시작하는 방법에 대한 아이디어가 있습니까?

고마워, Jason


3
메모리의 페이지 잠금 사용자 권한을 사용하고 있습니까? 그렇다면 작업 관리자가 잠긴 메모리를보고하지 않습니다. 자세한 내용은 blogs.technet.com/b/askperf/archive/2008/03/25/… 를 참조하십시오 .
Mark S. Rasmussen

Lock Pages in Memory 사용자 권한이 "None"으로 설정되어 있습니다. 또한 기본 int.MaxValue에 "최대 서버 메모리 (MB)"설정이 있습니다. 문제가 발생할 수 있다고 생각하십니까?
typefragger

4
내가 염려하는 유일한 시간은 내 SQL 서버가 82 %보다 적은 양을 사용하는 경우입니다!
SqlACID

답변:


15

서비스가 실행되는 계정에 메모리 권한의 잠금 페이지가있는 경우 작업 관리자에서 메모리 사용량을 정확하게 파악할 수 없습니다 (Mark Rasmussen의 설명 / 링크에 따라 편집). 사용중인 메모리 양을 확인하려면 다음을 참조하십시오.

  • SQLServer : 메모리 관리자 \ 총 서버 메모리 성능 카운터
  • DMV

DMV 또는 그 조합이 총 메모리 할당을 제공하는지는 기억할 수 없지만 다음은 대량의 메모리 할당을 보여줍니다.

SELECT TOP(10) [type] AS [Memory Clerk Type], SUM(single_pages_kb) AS [SPA Mem, Kb] 
FROM sys.dm_os_memory_clerks 
GROUP BY [type]  
ORDER BY SUM(single_pages_kb) DESC OPTION (RECOMPILE);

SELECT DB_NAME(database_id) AS [Database Name],
COUNT(*) * 8/1024.0 AS [Cached Size (MB)]
FROM sys.dm_os_buffer_descriptors
WHERE database_id > 4 -- system databases
AND database_id <> 32767 -- ResourceDB
GROUP BY DB_NAME(database_id)
ORDER BY [Cached Size (MB)] DESC OPTION (RECOMPILE);

두 번째는 가장 흥미로운 데이터베이스 별 버퍼 풀 할당입니다. 여기에서 라이온스 공유가 사용되며 데이터베이스 중 어느 것이 가장 큰 소비자인지 이해하는 것이 유용 할 수 있습니다.


와, 정말 고마워요! 이것은 (특히 두 번째 것) 나를 위해 완전히 분명하게했습니다!
typefragger

8

작업 관리자가 SQLServer 및 추가 서비스에서 사용하는 메모리를 올바르게 표시하지 않을 때 Brent Ozar의 최신 기사 에서이 사례를 처리합니다. 당신은 여기에서 찾을 수 있습니다 : 마이크로 소프트 SQL 서버 메모리에은 sysadmin의 가이드 .

인용구 : " 왜 SQLServer.exe가 많은 메모리를 사용하지 않습니까?

서버에 원격 데스크톱을 설치하고 작업 관리자를 보면 sqlservr.exe의 Mem Usage가 항상 이상하게 보입니다. 그것은 SQL Server의 결함이 아닙니다. 작업 관리자는 더럽고 더러운 거짓말 쟁이입니다. (나는 SQL 녀석이 책임을 바꾼 것처럼 들리지만, 잠시만 참 아라.) 64 비트 박스 에서이 숫자는 다소 정확하지만 32 비트 박스에서는 완전히 기본이 아닙니다. . SQL Server에서 사용중인 메모리 양을 정확하게 파악하려면 프로세스 탐색기와 같은 도구가 필요하며 모든 SQL Server 프로세스를 식별해야합니다. 오른쪽에 표시된 서버에는 두 개의 SQL Server 인스턴스 (sqlservr.exe로 표시됨)와 SQL 에이전트, SQL 브라우저 및 SQL Server 백업 도구가 있습니다. SQL Server Analysis Services, Integration Services 및 Reporting Services도 동일한 서버에서 실행되고 메모리를 사용하는 것도 드문 일이 아닙니다.

그렇다면 SQL은 얼마나 많은 메모리를 사용합니까? 나는 당신을 위해 이것을 쉽게 할 것입니다. SQL Server가 모든 메모리를 사용하고 있습니다. 기간."

따라서 Mark의 쿼리를 시도하고 더 나은 메모리 보고서 도구를 사용하는 것이 좋습니다. 또는 작업 관리자가 아닌 메모리를보고하도록 Perfmon을 신뢰하십시오.


-2

작업 관리자에 표시된 것처럼 SQL에서 사용하는 메모리 양은 대부분 최대 메모리 설정입니다. 최소 / 최대 설정은 다음과 같습니다.

SQL Server가 시작되면 최소 메모리 설정까지 메모리를 사용하기 시작합니다. SQL 요구가 증가함에 따라 SQL은 최대 메모리 설정까지 더 많은 메모리를 사용하기 시작합니다. 그런 다음 메모리는 SQL 사용이 중단 되더라도이 최대 지점을 유지합니다. 이것은 SQL이 많은 작업을 수행하고 많은 메모리를 사용한다는 인상을줍니다. 실제로이 메모리는 SQL에 의해 예약되어 있습니다.

서버에 비 SQL 메모리 부족이 발생하면 SQL은 최소 메모리 설정 지점까지 메모리를 해제합니다. 이것이 메모리 설정이 사용되는 방식입니다. Mark의 스크립트를 사용하여 SQL이이 메모리를 어떻게 사용하고 있는지 확인할 수 있습니다.


1
최소 / 최대는 더 이상 버퍼 풀 할당을 제어합니다. 이것은 BOL 의 서버 메모리 옵션 설명에서 첫 번째 라인입니다 . 설정은 작업 관리자에 표시된 설정과 전혀 관련이 없습니다. Brent의 taskmgr에 대한 "더러운, 더러운 거짓말 쟁이"에 대한 설명은 내가 읽은 내용과 상황을 요약 한 것입니다.
Mark Storey-Smith

@ MarkStorey-Smith는 귀하의 의견에 링크에서 더 자세히 내용을 읽으십시오. 작업 관리자는 시스템 자원의 사용법을 보여줍니다. 버퍼 풀은 시스템 자원이 아닙니다. 작업 관리자에 표시된 SQL의 메모리 사용량이 무엇을 의미하는지 설명하고 있습니다. 당신은 버퍼 풀을 언급함으로써 명백한 것을 진술하고 있지만 여전히 저를 잘못 증명하지는 않습니다.
StanleyJohns

"작업 관리자에 표시된 것처럼 SQL에서 사용하는 메모리의 양은 최대 메모리 설정이됩니다. 최소 / 최대 설정이 작동하는 방식입니다." '티.
Mark Storey-Smith

'최소 / 최대 설정이 작동하는 방식입니다.'마지막에 콜론이있어 설명이 다음 문장을 주장하는 것이 아니라 설명을 따릅니다. :)
StanleyJohns

1
나는 마크와 함께있다. Slava Oks 블로그 읽기 : 그는 메모리 관리자를 작성한 MS 팀의 일원이었습니다. 제목 "버퍼 풀"로 이동하십시오. "SQL Server에는 sp_conifigure를 사용하여 제어 할 수있는 두 개의 메모리 설정이 있습니다. 최대 및 최소 서버 메모리입니다. 잘 모르겠지만이 두 설정은 실제로 버퍼 풀의 크기를 제어합니다. 전체적으로 제어하지는 않습니다. SQL Server가 사용하는 실제 메모리 양 "
gbn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.