도서 소개
PostgreSQL DBA가 실무에서 수행하는 다양한 업무를 중심으로 구성되어 있다. 설치 및 환경 구축부터 오브젝트 관리, 아키텍처 이해, 주요 파라미터 설정, 물리 복제와 논리 복제, 백업 및 복구, 모니터링, 그리고 Vacuum까지, PostgreSQL 운영에 필요한 전반적인 내용을 폭넓게 다루고 있다.성능 튜닝이나 쿼리 튜닝과 같은 최적화 관련 주제를 다루지 않습니다. 해당 내용은 저자가 실제 수행한 PostgreSQL 튜닝 프로젝트 경험을 바탕으로, 별도의 책으로 기획하고 있다. PostgreSQL을 1~2년 정도 경험해 본 분들이나, 타 DBMS에는 익숙하지만 PostgreSQL을 새롭게 시작하는 단계에 있는 분들께 적합한 책이다.
작가 소개
지은이 : 김시연
27년 이상 데이터베이스 분야에 몸담아온 성능 튜닝 전문가이다. 20년 넘게 오라클 및 엑사데이터 기반의 성능 진단과 튜닝에 집중해 왔으며, 최근 5년 동안은 주로 PostgreSQL과 EDB 환경에서 성능 컨설팅과 DBA 업무를 수행해왔다. 연세대학교 공과대학원에서 컴퓨터공학을 공부했으며, 이전 직장인 (주)엑셈에서는 약 15년간 삼성전자를 포함한 다양한 고객사를 대상으로 오라클 성능 컨설팅을 수행했으며 컨설팅본부장을 역임했다.최근 5년간의 주요 프로젝트로는 신한투자증권 메타 프로젝트를 비롯해 교보문고 차세대, KT 지역화폐, 신한은행 ‘땡겨요’ 배달앱 등이 있으며, 이들 프로젝트에서 PostgreSQL 및 EDB 기반의 배치/온라인 시스템의 성능 개선과 DBA 업무를 수행했다.저서로는 <PostgreSQL 9.6 성능 이야기>와 그 영문판 <PostgreSQL 9.6 Performance Story>(Amazon 출간) 및 <Transaction Internals in 10gR2>(2008)가 있으며, 번역서로는 <Oracle 코어>(2012), <OWI를 활용한 오라클 진단 & 튜닝>(2005) 등이 있다.
지은이 : 최두원
26년 이상 데이터베이스 분야에 몸담아온 성능 튜닝 전문가이다. 개발자로서 일본 야치요 은행 프로젝트를 수행했으며, 이후 데이터베이스 보안과 성능 튜닝에 집중해왔다. 최근 8년간은 PostgreSQL과 EDB 환경에서 성능 컨설팅과 DBA 업무를 수행하고 있다.삼성디스플레이 EDB 전환 프로젝트를 시작으로 신한투자증권 메타 프로젝트, 교보문고 차세대, 롯데멤버스 채널시스템, 신한은행 ‘땡겨요’ 배달앱 등에서 PostgreSQL 및 EDB 기반의 배치·온라인 시스템 성능 개선과 DBA 업무를 맡았다. 현재는 SaaS형 모니터링 툴인 와탭에서 데이터베이스 모듈 설계와 컨설팅을 수행하고 있다.저서로는 <PostgreSQL 9.6 성능 이야기>가 있다.
목차
1장. 환경구축
1.1 설치
PostgreSQL 엔진 설치
데이터베이스 클러스터 생성
1.2 인스턴스 시작 및 정지
pg_ctl 명령어를 이용한 인스턴스 제어 방법
DB 서버 재시작 시에 인스턴스 자동 시작 방법
1.3 접속하기
로컬 접속
pg_hba.conf 파일을 이용한 접속 관리
원격접속을 위한 설정
유저 패스워드 암호화 방식
1.4 클라이언트 툴
psql
1.5 데이터베이스 환경 구축
유저 생성
롤 생성
데이터베이스 생성
스키마 생성
권한 관리
슈퍼유저 권한, CREATE 롤과 시스템 롤
익스텐션 설치
2장. 오브젝트
2.1 테이블
테이블 생성
테이블 복사
테이블 재구성
테이블 관리 명령어
2.2 인덱스
인덱스 생성
CIC (Create Index Concurrently) 옵션
인덱스 리빌드
인덱스 관리 명령어
2.3 파티션
파티션 개요
RANGE 파티션
LIST 파티션
HASH 파티션
파티션 인덱스
인덱스 ONLY 옵션
파티션 관리 명령어
2.4 뷰(View)
뷰 특징
2.5 시퀀스
시퀀스 특징
시퀀스 관리 명령어
2.6 함수
함수 실행 권한
3장. 아키텍처
3.1 인스턴스
공유 메모리
프로세스
데이터베이스 클러스터 주요 디렉토리와 파일들
3.2 테이블스페이스
pg_default 테이블스페이스
pg_global 테이블스페이스
사용자 테이블스페이스 생성
TEMP 테이블스페이스
3.3 테이블
테이블 (Heap 테이블)
Unlogged 테이블
Temp 테이블
TOAST (The Oversized-Attribute Storage Technique)
3.4 (운영 Tip) Template 데이터베이스 기능 활용 방안
4장. 파라미터 설정 가이드
4.1 로그 관련 파라미터
logging_collector
log_directory
log_filename
log_line_prefix
log_lock_waits
log_rotation_size
log_statement
4.2 접속 관련 파라미터
max_connections
superuser_reserved_connections
listen_addresses
port
4.3 메모리 관련 파라미터
shared_buffers
wal_buffers
work_mem
temp_buffers
hash_mem_multiplier
maintenance_work_mem
4.4 체크포인트 관련 파라미터
checkpoint_timeout
max_wal_size
4.5 WAL (Write Ahead Log) 관련 파라미터
wal_level
wal_keep_size
min_wal_size
wal_log_hints
checkpoint_completion_target
4.6 Autovacuum 관련 파라미터
autovacuum
autovacuum_max_workers
log_autovacuum_min_duration
4.7 병렬 처리 관련 파라미터
max_worker_processes
max_parallel_workers
max_parallel_workers_per_gather
max_parallel_maintenance_workers
4.8 세션 관리 파라미터
idle_in_transaction_session_timeout
4.9 압축 관련 파라미터
wal_compression
default_toast_compression
4.10 모니터링 관련 파라미터
log_min_duration_statement
shared_preload_libraries
pg_stat_statements.max
pg_stat_statements.track
track_activity_query_size
compute_query_id
auto_explain.log_min_duration
auto_explain.log_analyze
auto_explain.log_buffers
4.11 옵티마이저 관련 파라미터
effective_cache_size
random_page_cost
jit
4.12 아카이브 설정 관련 파라미터
archive_mode
archive_command
4.13 파라미터 설정 레벨 및 적용 순서
파라미터 적용 순서
pg_settings 뷰 살펴보기
5장. 복제
5.1 물리 복제
물리 복제 구성 절차
물리 복제 아키텍처
동기화 모드 유형
동기 모드 복제 구성 절차
동기화 레벨
Cascade 복제 구성 절차
5.2 논리 복제
논리 복제 구성 절차
논리 복제 아키텍처와 동작 순서
Publication 생성 옵션 및 설정 변경
Subscription 생성 옵션 및 설정 변경
양방향 논리 복제
5.3 논리/물리 복제를 활용한 전일자 배치 환경 구성
5.4 복제 슬롯
미사용 슬롯의 문제점
WAL 디스크 볼륨 공간 부족으로 인스턴스 비정상 종료 시의 조치 방법
max_slot_wal_keep_size 파라미터를 이용한 장애 방지 방안
5.5 LSN과 WAL 파일명
6장. 백업과 복구
6.1 논리 백업과 복구
pg_dumpall을 이용한 백업
pg_dump를 이용한 백업
psql과 pg_restore를 이용한 복원
pg_restore를 이용한 복구
COPY
6.2 물리 백업과 복구
백업 및 복구 개요
pgBackRest 설치 및 환경 파일 설정
pgBackRest를 이용한 백업
pg_basebackup을 이용한 전체 백업
pg_basebackup을 이용한 증분 백업
pgBackRest를 이용한 완전 복구
pgBackRest를 이용한 완전 복구 (Delta 옵션)
pg_basebackup을 이용한 완전 복구 (전체 백업)
pg_basebackup을 이용한 완전 복구 (증분 백업)
pgBackRest를 이용한 시점 복구 (별도 서버)
pgBackRest를 이용한 시점 복구 (동일 서버)
pg_basebackup을 이용한 시점 복구 (별도 서버)
불필요한 아카이브 파일 정리 방법
7장. 모니터링
7.1 성능 모니터링 개요
7.2 데이터베이스 모니터링
pg_stat_database 뷰를 이용한 데이터베이스 성능 모니터링
7.3 세션 모니터링
pg_stat_activity 뷰를 이용한 세션 모니터링
7.4 SQL 모니터링
1회 수행 시 응답시간이 느린 쿼리 모니터링
런타임 실행계획 확인: auto_explain 활용
반복 수행으로 과부하를 주는 쿼리 모니터링
7.5 IO 모니터링
버퍼 액세스 전략과 링 버퍼
pg_stat_io 뷰를 이용한 시스템 레벨의 I/O 성능 분석
pg_stat_all_tables와 pg_statio_all_tables 뷰를 이용한 테이블 IO 분석
pg_stat_wal 뷰를 이용한 WAL I/O 모니터링
7.6 복제 모니터링
pg_stat_replication 뷰를 이용한 복제 지연 분석
7.7 작업 진행 상황 모니터링
인덱스 생성 진행 상황 모니터링
Vacuum 진행 상황 모니터링
Vacuum Full 진행 상황 모니터링
COPY 진행 상황 모니터링
8장. 트랜잭션과 대기이벤트
8.1 트랜잭션과 락(Lock)
로우 레벨(Row-Level) 락
테이블 레벨 락
데드락 (Deadlocks)
멀티 트랜잭션 (Multi-Transaction)
pg_locks 뷰
Virtual XID
fastpath
8.2 대기이벤트
대기이벤트 유형
대기이벤트 모니터링 방법
DataFileRead 대기이벤트
WAL Insert 대기이벤트
WALWrite & WalSync 대기이벤트
BufferMapping 대기이벤트
transactionid 대기이벤트
tuple 대기이벤트
virtualxid 대기이벤트
relation 대기이벤트
9장. Vacuum
9.1 MVCC 모델과 PostgreSQL MVCC의 특징
MVCC의 이해
PostgreSQL MVCC의 특징
32비트 XID 문제 해결을 위한 2가지 기법
정리
9.2 Vacuum 기본
Vacuum 수행 방법과 옵션
Vacuum 유형별 WAL 발생량
Vacuum 작업 수행 시 페이지 내의 변경 사항
vacuumlo를 이용한 Orphan LOB 정리 방법
AGE란?
Visibility Map
9.3 Vacuum과 Autovacuum 관련 주요 파라미터
Autovacuum 프로세스의 역할
Autovacuum 작업 주기 설정용 파라미터
Autovacuum 작업 부하 조절용 파라미터
Autovacuum: Vacuum 및 Analyze 작업 시점 계산용 파라미터
Autovacuum: Frozen 작업 관련 파라미터
9.4 Slow Query 수행과 Vacuum
데드 튜플 삭제 기준 (Cutoff) 정책
테스트를 통한 동일 레코드 반복 업데이트 문제점 확인
9.5 복제 충돌과 Hot Standby Feedback
복제 충돌 현상 발생 원인
Vacuum 수행에 의한 스냅샷 복제 충돌
스냅샷 복제 충돌 현상을 지연시키는 방법
스냅샷 복제 충돌 현상을 제거하는 방법
DDL 수행에 의한 락 복제 충돌 현상
9.6 HOT (Heap-Only Tuples)와 fillfactor
HOT 탄생 배경과 기본 컨셉
HOT 동작 원리
fillfactor와 HOT 업데이트 최적화
부록
PSQL 주요 명령어
PSQL 메타 명령어
테이블 주요 Storage 파라미터
주요 익스텐션
pg_prewarm
Autoprewarm
pg_buffercache
pgstattuple
pageinspect