반응형
🔎 문제 상황
최근 로컬 개발 환경에서 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_memory
와sys.dm_os_sys_memory
를 체크하거나, 모니터링 봇을 설정하면 더욱 안정적인 운영이 가능하다.
반응형
'Programming' 카테고리의 다른 글
📊 Twelve Data API 완벽 가이드 – 실시간 금융 데이터 가져오기 (4) | 2025.05.10 |
---|---|
📈 yfinance 429 오류 해결법: Too Many Requests 문제 완전 정복 (0) | 2025.05.10 |
🛠️ 야후 파이낸스 API 429 오류(Too Many Requests) 대응법 총정리 (1) | 2025.05.08 |
🧠 진짜 쉽게 배우는 Python 함수형 프로그래밍: lambda, map, filter, reduce (0) | 2025.03.31 |
📡 Python으로 MSSQL 저장 프로시저 실행하기 (파라미터 전달까지 완벽 정리!) (0) | 2025.03.28 |