planner는 통계를 보고 계획을 세운다 — pg_statistic과 pg_stats 읽는 법

PostgreSQL planner는 쿼리를 실행해 보지 않고 통계 요약만 보고 실행계획을 정한다. ANALYZE가 샘플을 떠서 pg_statistic에 채우는 과정, pg_stats의 n_distinct·most_common_vals·histogram_bounds·correlation을 읽는 법, planner가 그 숫자로 row를 추정하는 공식을 공식 문서 기준으로 정리했다.

2026년 6월 26일

PostgreSQL은 왜 이건 아직 못 할까 — Momjian이 짚은 코어의 빈칸들

Bruce Momjian의 ‘What’s Missing in Postgres?‘를 따라, PostgreSQL이 매년 200개 기능을 더하면서도 끝내 코어에 못 들인 빈칸을 짚는다. sharding, connection pooling, 내장 암호화처럼 ‘당연히 될 것 같은데 안 되는’ 항목들이 왜 비어 있는지, 지금은 무엇으로 메우고 있는지 정리한다.

2026년 6월 26일

PostgreSQL 19 — logical replication이 드디어 sequence를 따라간다

PostgreSQL 19부터 logical replication이 sequence 값을 subscriber로 동기화한다. failover 직후 첫 INSERT가 duplicate key로 터지던 오래된 함정이 ALL SEQUENCES 절과 REFRESH SEQUENCES 명령으로 정리됐다. 다만 연속 동기화가 아니라 시점 동기화라서, cutover runbook에 들어갈 자리가 정해져 있다.

2026년 6월 26일

PostgreSQL 19의 data_checksums — 재시작 없이, 클러스터를 멈추지 않고 켠다

PostgreSQL 19부터 data_checksums를 실행 중인 클러스터에서 재시작 없이 켜고 끌 수 있다. 과거엔 initdb 시점에 고정하거나 클러스터를 멈춰 pg_checksums로 전환해야 했다. 13년 진화사와 함께, 온라인 전환이 즉시 끝나는 일이 아닌 이유를 DBA 관점으로 정리한다.

2026년 6월 5일

pg_stat_statements가 알려주는 모든 것 — DBA가 실제로 봐야 할 컬럼과 해석

pg_stat_statements는 컬럼이 많지만 DBA가 실제로 보는 건 몇 개뿐이다. 느린 쿼리를 찾는 정렬 기준, mean과 total의 차이, I/O 컬럼 읽는 법, 해시 테이블이 가득 찼을 때 일어나는 일, 그리고 리셋 전략까지 실무 관점으로 정리했다.

2026년 6월 5일

File Descriptor — PostgreSQL을 무너뜨리는 OS 한계

연결 풀러 없이 max_connections만 키우면 file descriptor 고갈로 인스턴스 전체가 무너진다. backend 프로세스가 fd를 먹는 구조부터 EMFILE 증상, ulimit·max_files_per_process·PgBouncer 대응까지 한 흐름으로 정리한다.

2026년 6월 5일

암호화된 PostgreSQL은 pgBackRest로 백업될까 — pg_tde 궁합 검증

투명 데이터 암호화 extension인 pg_tde를 켠 클러스터에서 pgBackRest 백업과 복구가 멀쩡히 돌아가는지 검증한 결과를 정리했다. 대부분 투명하게 작동하지만, 암호화 특성 때문에 꺼야 할 설정 몇 가지가 있다.

2026년 6월 5일

Oracle가 분기 패치를 버렸다 — 월간 CSPU 체제의 시작

Oracle이 20년 넘게 유지한 분기 Critical Patch Update에 더해, 매달 셋째 화요일 Critical Security Patch Update(CSPU)를 발행하기 시작했다. 첫 CSPU는 5월 28일, CVE 35건. 왜 분기에서 월간으로 갔는지를 AI 시대의 취약점 발견 속도와 DBA 관점에서 본다.

2026년 6월 1일

PostgreSQL 19 Beta — DBA가 실제로 느낄 Big 4 변화

Christophe Pettus가 PostgreSQL 19 Beta에서 추려낸 Big 4는 화려한 신기능이 아니라 운영 사고를 막거나 만드는 변화다. 64bit MultiXact가 4억 행 잠금 사고를 끝내고, 병렬 autovacuum 인덱스 worker가 메모리 계산을 새로 만든다. FOR PORTION OF는 시간 범위 UPDATE를 SQL로 끌어오고, JIT 기본값이 12부터 처음으로 다시 꺼진다.

2026년 5월 21일

PostgreSQL 19의 wal_level — 고정값에서 동적 floor 값으로

PostgreSQL 19부터 wal_level이 고정 설정이 아니라 floor 값으로 동작한다. logical replication slot이 생기면 effective level이 자동으로 올라가고, 마지막 slot이 사라지면 다시 내려간다. cascading standby와 archived WAL의 비대칭 함정 포함.

2026년 5월 13일