SQL Server 메모리
SQL Server 메모리에 관한 것입니다. 서버의 메모리가 부족한 경우 CPU 사용 문제를 극복하기 위해 하드웨어에 메모리를 추가하는 것이 좋습니다.
그러나 메모리 업그레이드를 진행하기 전에 문제 해결의 일환으로 인스턴스에서 현재 사용되는 SQL 메모리를 어떻게 확인 / 계산합니까?
예를 들면 :
서버 이름 : XXXXXXXXXXXXX
설치된 실제 메모리 (RAM) : 64.0GB
현재 할당 된 SQL Server 메모리 : 58982MB-> 58.982GB
이 경우 서버에 하나의 인스턴스 (MSSQLSERVER) 만 있고 표준에 따라 80 % 메모리가 인스턴스에 할당되었습니다. 그리고 20 %는 애플리케이션 및 OS에 할당됩니다.
리소스 모니터를 확인하면 SQL Server 메모리를 설정했기 때문에 80 %가 채워진 것으로 표시됩니다.
그러나 SQL이 백엔드의 버퍼에 일부 공간을 유지하므로 SQL의 80 %가 완전히 활용된다는 의미는 아닙니다. 서핑을 할 때 인스턴스에서 소비되는 SQL 메모리를 계산하기 위해 아래 공식을 얻었지만 이러한 매개 변수는 성능 모니터 도구에서 오랫동안 제거되었습니다.
확인하는 방법이 있습니까? 현재 메모리 업그레이드를 진행할 수있는 메트릭에 대해 SQL이 80 % (OR) 중 얼마나 많이 사용하고 있습니까?
SQL 메모리 계산을위한 공식 : (아래 매개 변수가 성능 모니터에서 제거됨)
*Database Usage(GB) = (Totalpages-Freepages-Stolenpages)8/1024=MB/1024=GB
답변
인스턴스에서 현재 사용되는 SQL 메모리를 어떻게 확인 / 계산합니까?
그것은 매우 간단합니다. 정보를 제공하는 DMV sys.dm_os_process_memory 가 있습니다. 그것은 당신에게 줄 것이다 physical memory used및total memory used (RAM+Page file)
select (physical_memory_in_use_kb/1024) as Phy_Mem_used_MB, (virtual_address_space_committed_kb/1024) as Total_mem_Used_MB
from sys.dm_os_process_memory
그러나 SQL이 백엔드의 버퍼에 약간의 공간을 유지하므로 SQL의 80 %가 완전히 활용된다는 의미는 아닙니다.
SQL Server가 최대 서버 메모리 값에 도달하면 메모리 부족 알림에서 메모리 해제를 요청하지 않는 한 해당 메모리를 유지합니다. 그래서 예, 그것을 모두 사용하지 않을 수도 있지만 여전히 그것을 유지할 것입니다. 하드 페이지 오류를 방지하는 데 도움이되므로이를 캐싱이라고합니다.
확인하는 방법이 있습니까? 현재 메모리 업그레이드를 진행할 수있는 메트릭에 대해 SQL이 80 % (OR) 중 얼마나 많이 사용하고 있습니까?
내가 한 번 사용했다고 말했듯이 쿼리 처리에서 해당 페이지가 필요하지 않은 경우에도 사용 된 모든 메모리를 표시합니다. 새로운 요청이 오면이 페이지는 새 페이지를위한 공간을 만들기 위해 이동됩니다.
"활용"을 어떻게 정의합니까? 1 초 전에 캐시로 읽은 페이지가 활용 된 것으로 간주됩니까? 1 분 전에 요? 한시간? 일주일?
요점은 "활용 된"것과 같은 것이 없다는 것입니다. SQL 서버는 페이지 (및 기타 항목)를 메모리에 보관합니다. 메모리 부족 (내부 또는 외부)이있는 경우 기존 캐시 에이징 메커니즘 (기본적으로)을 사용하여 최근에 가장 적게 사용 된 항목을 제거합니다. 물론 메모리 (캐시) 처리에 대한 더 많은 세부 사항이 있지만 원칙적으로 모든 캐싱 메커니즘처럼 처리됩니다.
따라서 "사용됨"또는 최적 구성과 같은 개념은 존재하지 않습니다. 물론 SQL 서버에서 사용하지 않는 메모리가 많이 있는지 확인할 수 있습니다. 그러나 SQL 서버가 메모리를 할당하면 메모리가 부족하지 않는 한 중단됩니다. 누가 다음 순간에 그 페이지가 필요할지 누가 알겠습니까?
예를 들어 최대 서버 메모리를 줄이고 성능이 언제 손상되기 시작하는지 확인할 수 있습니다.
MemoryManagerInfo여기에서 찾을 수있는 저장 프로 시저를 사용합니다 .
https://github.com/aleksey-vitsko/Database-Administrator-Tools
SQL Server가 현재 메모리를 사용 하는 방식에 대한 좋은 분석을 제공합니다. 아래이
그림의 예를 참조하십시오 . 내 서버가 현재 사용하고있는 것입니다.
대략 Total Server Memory= Database Cache Memory+ Free Memory+ Stolen Server Memory(도난당한 서버 메모리에는 계획 캐시, 잠금 등이 포함됩니다.)