성능 튜닝 실전 — 메모리·체크포인트·병렬쿼리 설정 최적화
📋 실습 안내
✏️ CODE EDITOR (JSX)
▶ 실행 버튼을 눌러 코드를 테스트하세요.
👁️ 내 미리보기
내 코드 실행 결과
🎯 완성 미리보기
목표
위 에디터 코드를 수정해서 이 결과물과 똑같이 만들어보세요!
💡 TODO 주석을 채워서 위 결과물처럼 동작하게 만들어보세요
🤖 AI 선생님에게 질문하기
이번 강의 전용
▼
선생님이 답변 중이에요...
⚠️ 학습 관련 질문만 답변합니다. 관련 없는 질문은 자동으로 학습으로 유도됩니다.
Q1. PostgreSQL에서 work_mem = 64MB로 설정 시 100개 연결이 각각 3개의 정렬 연산을 수행한다면 최대 메모리 사용량은?
💡 work_mem은 연결(connection) × 연산(operation) 단위로 할당됩니다. 100 × 3 × 64MB = 19.2GB. 따라서 OLTP 환경에서는 전역 work_mem을 낮게(4~16MB) 유지하고, OLAP 쿼리는 세션 단위로 증가시켜야 합니다.
Q2. SSD 스토리지를 사용하는 PostgreSQL 서버에서 random_page_cost를 기본값(4.0)에서 낮춰야 하는 이유는?
💡 random_page_cost는 랜덤 페이지 접근 비용을 나타내는 플래너 힌트입니다. SSD는 HDD보다 랜덤 I/O가 빠르므로 1.1~1.5로 낮춰야 플래너가 인덱스 스캔을 더 적극적으로 선택합니다.
Q3. max_wal_size를 늘리면 어떤 효과가 있는가?
💡 max_wal_size는 Checkpoint 사이에 허용되는 최대 WAL 크기입니다. 이 값을 늘리면 Checkpoint 발생 간격이 길어져 I/O 스파이크가 줄어들고, checkpoint_completion_target = 0.9와 조합하면 I/O가 분산됩니다.
Q4. 병렬 쿼리 실행 계획에서 Gather 노드의 역할은?
💡 Gather 노드는 병렬 실행의 진입점으로, 여러 worker 프로세스가 처리한 부분 결과를 하나의 결과 집합으로 합칩니다. Gather Merge는 정렬된 결과를 병합합니다.
Q5. pg_stat_database의 temp_files가 지속적으로 증가할 때 의미하는 것은?
💡 정렬, 해시 조인, GROUP BY 등의 연산이 work_mem 한도를 초과하면 디스크 임시 파일(temp file)을 생성합니다. temp_files가 많으면 해당 쿼리의 work_mem을 늘리거나 쿼리를 최적화해야 합니다.
😅
아쉽네요!
점수: 0점 — 70점 이상이 되어야 통과합니다.