728x90

PostgreSQL 90

PostgreSQL: 병렬 INSERT가 되지 않는 이유

※ The reason why parallel INSERT doesn't work in PostgreSQL. 안녕하세요. 듀스트림입니다. 개발자분들에게 가장 많이 받는 질문 중 하나죠. "PG는 병렬 인서트 안 되나요?"에 대한 대답입니다.PostgreSQL은 9.6 버전부터 병렬 쿼리를 도입하여 Parallel Seq Scan, Parallel Hash Join, Parallel Aggregate 등 읽기 연산에서 큰 성능 향상을 가져왔습니다.하지만 2025년 기준 최신 릴리즈인 PostgreSQL 17에서도 INSERT, UPDATE, DELETE와 같은 DML은 여전히 병렬로 실행되지 않습니다. 이유를 요약하자면 아래와 같습니다.XID 생성이 직렬화(XidGenLock)되어 병렬로 안전하게 나눌 수..

PostgreSQL 2025.06.08

PostgreSQL: EXPLAIN

※ PostgreSQL: EXPLAIN. 안녕하세요. 듀스트림입니다. 오늘은 성능 최적화의 시작인 EXPLAIN에 대해 알아보겠습니다.1. EXPLAIN?PostgreSQL의 EXPLAIN은 쿼리 실행 전에 플래너가 수립한 실행 계획을 보여주는 명령어입니다EXPLAIN ANALYZE는 실제로 쿼리를 실행한 후 통계를 함께 출력합니다.실행계획을 해석하는 것은 성능 최적화의 출발점이며, 단순한 실행 경로 확인을 넘어서 통계 정보의 신뢰도와 인덱스의 효율성까지 진단하는 데 도움이 됩니다. EXPLAINEXPLAIN EXPLAIN — show the execution plan of a statement Synopsis EXPLAIN [ ( option [, ...] ) ] statement …www.postg..

PostgreSQL 2025.05.29

PostgreSQL: postgres_fdw vs dblink

※ PostgreSQL: postgres_fdw vs dblink. 안녕하세요. 듀스트림입니다. 오늘은 PostgreSQL 데이터베이스 간 연결 및 쿼리 실행을 위한 익스텐션인 postgresql_fdw와 dblink의 차이에 대해 알아보겠습니다.postgres_fdw vs dblink기능 비교항목postgres_fdwdblink기본 개념외부 PostgreSQL 서버의 테이블을 로컬 테이블처럼 조회 가능외부 서버로 SQL을 전달하여 결과를 가져오는 함수사용 방식외부 테이블 정의 후 SELECT, INSERT, UPDATE, DELETE 가능SQL을 문자열로 전달하여 SELECT, INSERT 등 직접 실행쿼리 통합로컬 쿼리와 통합된 실행 계획 사용 가능 (조인 최적화 등)로컬 쿼리와 분리, 서버 간 조인..

PostgreSQL 2025.05.28

PostgreSQL: work_mem

※ PostgreSQL: work_mem. 안녕하세요. 듀스트림입니다. 오늘은 PostgreSQL 성능 관점에서 가장 중요한 메모리 파라미터 중 하나인 work_mem에 대해 자세히 알아보겠습니다. 동작 방식과 적용 방식에 대해 오해하시는 분들이 많은 거 같아서 작성해 봤습니다.1. work_mem이란?work_mem은 PostgreSQL에서 정렬(Sort), 해시 테이블 빌드(Hash Join, Hash Aggregate), 정렬 기반 연산(WindowAgg, SetOp) 등과 같은 Plan 노드 단위의 작업에 사용되는 세션 로컬 임시 메모리의 상한값입니다. 각 노드마다 독립적으로 할당되며, 초과 시 PostgreSQL은 자동으로 디스크 임시 파일로 스필(spill) 처리하지만, 일부 표현식 평가(Ex..

PostgreSQL 2025.05.27

PostgreSQL: Disk Spill

※ PostgreSQL: Disk Spill. 안녕하세요. 듀스트림입니다. 이번 포스팅은 대용량 쿼리의 성능을 좌우하는 핵심 요소 중 하나인 디스크 스필에 관한 내용입니다.1. 디스크 스필?Disk Spill은 PostgreSQL에서 쿼리를 실행하는 중 특정 연산(예: 정렬, 해시 조인, 집계 등)이 할당된 메모리(work_mem)를 초과할 경우, 그 초과된 데이터를 디스크(임시 파일)에 저장하여 처리하는 방식을 말합니다. 항목설명발생 조건연산 중 메모리 사용량이 work_mem 초과 시적용 대상정렬(Sort), 해시 조인(Hash Join), 해시 집계(Hash Aggregate) 등성능 영향디스크 I/O 발생으로 쿼리 속도 저하 가능감지 방법EXPLAIN (ANALYZE) 결과 또는 log_temp_..

PostgreSQL 2025.05.26

PostgreSQL: ExprContext 기반 GeoJSON 조회 쿼리로 인한 OOM(Out of Memory) 발생 사례 분석

※ Analyzing OOM (Out of Memory) Occurrence Due to GeoJSON Query Using PostgreSQL's ExprContext. 안녕하세요. 듀스트림입니다. 오늘은 실제 현업에서 발생한 PostgreSQL의 OOM(Out-Of-Memory) 사례를 기반으로 원인, 로그 분석, 쿼리 구조 분석, 최적화 방안을 정리해봤습니다. ※ 실제 내용을 바탕으로 재구성하여 재현한 내용입니다. 1. 개요발생 증상: 특정 JSON 조회 쿼리 실행 중 OOM 오류 발생으로 세션 강제 종료 및 PostgreSQL Recovery 모드 진입 후 복원.시스템 환경:PostgreSQL 버전: 14.2.시스템 총 메모리: 16GB.2. 로그 분석 (PostgreSQL 표준 로그)주 원인 ..

PostgreSQL 2025.05.24

PostgreSQL: WAL

※ PostgreSQL: WAL. 안녕하세요. 듀스트림입니다. 오늘은 매우 중요한 데이터 무결성과 복구를 보장하는 핵심 메커니즘인 WAL(Write-Ahead Logging)에 대한 내용입니다.1. WAL의 기본 개념Write-Ahead Logging (WAL)은 데이터베이스의 ACID 속성 중 원자성(Atomicity)과 지속성(Durability)을 보장하기 위한 기술입니다.데이터 파일에 변경 사항을 적용하기 전에, 해당 변경 내용을 로그에 기록하고 이를 디스크에 저장함으로써, 시스템 장애 발생 시 로그를 통해 복구할 수 있습니다.기본 원칙: 데이터 파일에 대한 변경은 해당 변경이 WAL에 기록되고 디스크에 저장된 후에만 수행됩니다.복구 메커니즘: 시스템 장애 발생 시, WAL에 기록된 로그를 재생하..

PostgreSQL 2025.05.23

PostgreSQL: reload

※ PostgreSQL: reload. 안녕하세요. 듀스트림입니다. 오늘은 PostgreSQL에서 설정 파일을 다시 읽도록 요청하는 리로드 명령에 대한 내용입니다.1. reload리로드 명령은 PostgreSQL 서버 프로세스에게 SIGHUP 시그널을 보내 설정 파일들을 다시 읽도록 하는 명령입니다.OS CLI 명령어인 pg_ctl reload와 PostgreSQL의 함수인 pg_reload_conf()로 내릴 수 있습니다. + PostgreSQL 설정 파일파일명역할postgresql.conf기본 전역 설정postgresql.auto.confALTER SYSTEM으로 생성되는 설정 pg_hba.conf접속 인증 설정pg_ident.conf클라이언트 인증(매핑) ++ PostgreSQL 설정 우선순위 (높..

PostgreSQL 2025.05.22

PostgreSQL: TOAST

※ PostgreSQL: TOAST. 안녕하세요. 듀스트림입니다. 오늘의 주제는 PostgreSQL의 스토리지 분리 메커니즘인 토스트에 대한 내용입니다.1. TOASTPostgreSQL에서 TOAST (The Oversized-Attribute Storage Technique)는 테이블 컬럼에 너무 큰 데이터가 들어올 경우 이를 별도의 저장소로 분리해 저장하는 메커니즘입니다. TOAST는 PostgreSQL의 저장 구조와 퍼포먼스 최적화에 매우 중요한 역할을 합니다.2. TOAST의 필요성PostgreSQL의 데이터 페이지는 기본값으로 설치할 경우 8KB입니다. 테이블의 한 row 전체는 하나의 페이지를 초과할 수 없습니다. text, bytea, json, xml, jsonb, tsvector, tsq..

PostgreSQL 2025.05.21

PostgreSQL: VACUUM

※ PostgreSQL: VACUUM.※ Version: PostgreSQL 17. 안녕하세요. 듀스트림입니다. 오늘 포스팅은 PostgreSQL의 핵심인 VACUUM입니다.1. VACUUMVACUUM은 PostgreSQL에서 데이터베이스의 성능을 유지하고, 디스크 공간을 효율적으로 관리하기 위해 주기적으로 수행해야 하는 유지 보수 작업입니다. PostgreSQL의 MVCC(Multi-Version Concurrency Control) 시스템에서 중요한 역할을 합니다. VACUUM 작업은 일반적으로 ACCESS SHARE LOCK을 획득합니다.SELECT 문과 동일한 락으로, 다른 트랜잭션에서 DML 작업(INSERT, UPDATE, DELETE)을 수행할 수 있습니다. 추가로, VACUUM이 dead ..

PostgreSQL 2025.05.17
728x90