이 문서에서는 SQL Server용 Cloud SQL 인스턴스가 과소 프로비저닝된 인스턴스 추천자에 의해 메모리 사용량이 높은 것으로 식별된 경우, 해당 인스턴스를 검토하여 최적화하는 방법에 대해 설명합니다.
SQL Server 메모리
SQL Server 메모리는 다음과 같이 나눌 수 있습니다.
캐시
이것들은 데이터베이스 페이지 및 저장 프로시져와 같이 로드할 수 있는 디스크의 객체입니다. 따라서 SQL Server가 메모리 사용량을 기준으로 이러한 객체를 늘리거나 줄일 수 있습니다. 캐시에는 버퍼 풀과 계획 캐시가 포함됩니다.
고정 메모리
고정 메모리는 증가하거나 축소될 수 있습니다. 사용하지 않을 때만 축소됩니다. 예를 들어 연결 수가 감소하거나 실행 중인 쿼리 수가 감소하는 경우가 여기에 해당합니다. 이는 캐시와 다릅니다. 고정 메모리가 부족하면 SQL Server에서 메모리가 부족해질 수 있습니다. 고정 메모리에는 연결 메모리 및 메모리 부여가 포함됩니다.
SQL Server 오버헤드
SQL Server 오버헤드에 스레드 및 스택이 포함됩니다.
인메모리 OLTP
인메모리 OLTP에는 인메모리 테이블과 인메모리 파일 그룹이 포함됩니다.
SQL Server의 메모리 소비는 maximum server memory
및 memory.memory.limitmb
설정으로 제어됩니다. Cloud SQL은 memory.memory.limitmb
매개변수를 자동으로 설정합니다.
memory.memory.limitmb
에 대한 자세한 내용은 Microsoft 문서를 참조하세요.
max server memory
한도를 적절한 값으로 설정해야 합니다. SQL Server에서 max server memory
가 설정되지 않으면 데이터베이스 페이지가 대부분의 메모리를 최대 100%까지 소비할 수 있습니다. 이로 인해 때로는 혼동이 생기기도 합니다.
메모리 최적화 옵션
인스턴스에 메모리 조정이 필요한지 확인하려면 다음을 수행하세요.
max server memory
값 설정하기 일반적으로 SQL Server가 사용 가능한 모든 메모리를 사용하지 않도록max server memory
를 약 80%로 설정하는 것이 좋습니다. 메모리가 많은 인스턴스의 경우 80%는 너무 낮아서 메모리 낭비로 이어질 수 있습니다.Page life expectancy
모니터링하기Page life expectancy
는 버퍼 풀에 가장 오래된 페이지가 남아 있는 시간을 초 단위로 나타냅니다. 이 값은 Microsoft에서 권장하는 300보다 커야 합니다. 지속적으로 300 미만이면 인스턴스의 메모리 사용량이 높음을 의미할 수 있습니다. 다음 쿼리를 실행하여Page life expectancy
를 모니터링하세요.SELECT [object_name], [counter_name], [cntr_value] FROM sys.dm_os_performance_counters WHERE [object_name] LIKE '%Manager%' AND [counter_name] = 'Page life expectancy'
Memory Grants Pending
확인하기Memory Grants Pending
은 작업공간 메모리 부여를 기다리는 총 프로세스 수를 지정합니다. 다음 쿼리를 실행하여Memory Grants Pending
을 확인합니다. 이 쿼리로 권한 부여가 계속해서 대기 중으로 표시되면 메모리 사용량이 높음을 나타냅니다. 데이터베이스 대기를 쿼리하고 메모리에서 대기 중인 문을 미세 조정하여 사용량을 줄일 수 있습니다.SELECT @@SERVERNAME AS [Server Name], RTRIM([object_name]) AS [Object Name], cntr_value AS [Memory Grants Pending] FROM sys.dm_os_performance_counters WITH(NOLOCK) WHERE [object_name] LIKE N'%Memory Manager%' -- Handles named instances AND counter_name = N'Memory Grants Pending'