Programming

💾 SQL Server 메모리 과점유 문제 해결 및 진단 가이드

quantoasis 2025. 5. 28. 13:44
반응형

🔎 문제 상황

최근 로컬 개발 환경에서 SQL Server가 시스템 메모리를 과도하게 점유하면서, 다른 응용 프로그램(VS Code, 크롬, 파이썬 등)의 반응 속도가 느려지는 현상이 발생했다. 작업 관리자를 열어보니 전체 16GB 메모리 중 여유 공간이 1GB도 채 남지 않은 상태였다.

SQL Server는 기본적으로 시스템 메모리를 가능한 한 많이 사용하도록 설계되어 있기 때문에, 특별한 설정이 없다면 이런 상황이 자주 발생할 수 있다.


⚠️ 원인 요약

  • SQL Server의 기본 메모리 설정값은 max server memory = 2147483647, 즉 무제한 사용
  • 그 결과, OS나 다른 앱에 할당할 메모리가 부족해짐
  • Windows OS에서 available memory가 1GB 이하로 떨어지면 전체 시스템 성능이 저하

🛠️ 해결 방법: 메모리 사용 제한 설정

1️⃣ 현재 메모리 설정 확인

EXEC sp_configure 'max server memory';
name                        minimum    maximum        config_value    run_value
-------------------------- ---------- --------------- -------------- -------------
max server memory (MB)     128        2147483647      2147483647     2147483647

→ 기본 설정값은 제한 없음 (2147483647 = 2PB 수준)


2️⃣ SQL Server 최대 메모리 사용량 제한 (예: 12GB → 10GB)

-- 고급 옵션 활성화
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;

-- 최대 메모리 10GB로 제한
EXEC sp_configure 'max server memory', 10240;
RECONFIGURE;

적용 후 확인:

EXEC sp_configure 'max server memory';

📈 실시간 메모리 점유 현황 모니터링

1️⃣ SQL Server 프로세스 메모리 사용 현황

SELECT 
    physical_memory_in_use_kb / 1024 AS memory_MB,
    large_page_allocations_kb / 1024 AS large_pages_MB,
    locked_page_allocations_kb / 1024 AS locked_pages_MB
FROM sys.dm_os_process_memory;

📌 예시 결과:

memory_MB large_pages_MB locked_pages_MB
8902 MB 0 0

→ 현재 약 8.9GB 사용 중. Large Page, Locked Page는 사용되지 않음(정상)


2️⃣ 시스템 전체 메모리 상태

SELECT 
    total_physical_memory_kb / 1024 AS total_memory_MB,
    available_physical_memory_kb / 1024 AS available_memory_MB,
    system_memory_state_desc
FROM sys.dm_os_sys_memory;

📌 예시 결과:

total_memory_MB available_memory_MB 상태
16123 MB 847 MB Physical memory usage is steady

→ 시스템 여유 메모리 847MB로 매우 부족한 상태였으나, SQL Server 메모리 제한 후 점차 회복


🧠 고급 분석: 메모리 클럭별 점유 현황

SQL Server는 다양한 "메모리 클럭(Memory Clerks)"을 통해 메모리를 관리한다. 이들을 분석해 비정상 점유 여부를 판단할 수 있다.

SELECT 
    type, 
    SUM(pages_kb)/1024 AS size_MB
FROM sys.dm_os_memory_clerks
GROUP BY type
ORDER BY size_MB DESC;

📌 주요 결과:

클럭 타입 사용량 (MB) 설명
MEMORYCLERK_SQLBUFFERPOOL 8721 ✔ SQL 데이터 페이지 버퍼 (정상적 대용량 점유)
MEMORYCLERK_SOSNODE 61 내부 스레드 제어
OBJECTSTORE_LOCK_MANAGER 25 잠금 정보 캐시
기타 클럭들 ≤ 20 대부분 적은 양으로 안정적

→ 결론: 버퍼 풀이 대부분의 메모리를 차지하고 있고, 나머지는 정상 수준이다.


✅ 결과 요약 및 권장 조치

항목 평가
SQL Server 메모리 점유 구조 정상적 (버퍼 풀 중심)
메모리 과점유 원인 max server memory 무제한 설정
조치 max server memory = 10240(10GB) 설정
후속 모니터링 필요 여부 필요 (메모리 여유 지속 체크 권장)

📬 마무리 및 팁

  • SQL Server는 가능한 한 많은 메모리를 캐시로 점유해 성능을 확보하려고 한다.
  • 하지만 시스템 메모리가 16GB 이하인 환경에서는 수동 제한이 필수
  • 주기적으로 sys.dm_os_process_memorysys.dm_os_sys_memory를 체크하거나, 모니터링 봇을 설정하면 더욱 안정적인 운영이 가능하다.
반응형