728x90

PostgreSQL 65

PostgreSQL: 온라인 인덱스 작업(CONCURRENTLY)

※ PostgreSQL: Performing Index Operations Online Using CONCURRENTLY. 안녕하세요. 듀스트림입니다. 또 한 주가 시작되었습니다. 오늘 포스팅은 운영 서비스 중에도 쓰기 중단 없이 인덱스를 추가·재구성·삭제할 수 있게 해주는 CONCURRENTLY 옵션에 대한 내용입니다. CREATE INDEXCREATE INDEX CREATE INDEX — define a new index Synopsis CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ [ …www.postgresql.org1. CONCURRENTLY 옵션?목적: DDL 실행 중에도 INSERT/UPDATE/DELETE를 차단하지 않고 인덱스를 생성·재구성·삭제할 수 있게..

PostgreSQL 2025.07.14

PostgreSQL: HOT(Heap-Only Tuple)

※ PostgreSQL: HOT(Heap-Only Tuple). 안녕하세요. 듀스트림입니다. 오늘 포스팅은 PosgreSQL 8.3 버전부터 도입된 HOT에 대한 내용입니다. 참고로 저는 HOT 세대입니다.1. PostgreSQL의 MVCC 업데이트 비용과 HOT의 등장 배경PostgreSQL은 MVCC로 인해 UPDATE 시마다 기존 튜플을 삭제하지 않고 새 버전을 추가합니다.일반적인(Non-HOT) 업데이트는 아래와 같은 비용을 수반합니다.모든 인덱스 Re-write: 바뀌지 않은 인덱스 컬럼까지 새 키가 기록됩니다.불필요한 WAL 증가와 I/O: 인덱스·데이터 블록 모두 더티 페이지가 늘어납니다.인덱스/테이블 블로트: 시간이 지날수록 dead index entries, dead tuples 누적됩니..

PostgreSQL 2025.07.11

PostgreSQL: pg_store_plans

※ PostgreSQL: pg_store_plans.※ Version: Linux 8.10 (Rocky), PostgreSQL 17.4, pg_store_plans 1.9. 안녕하세요. 듀스트림입니다. 오늘은 오랜만에 익스텐션 관련 내용입니다. GitHub - ossc-db/pg_store_plans: Store execution plans like pg_stat_statements does for queries.Store execution plans like pg_stat_statements does for queries. - ossc-db/pg_store_plansgithub.com1. pg_store_plans?pg_store_plans는 PostgreSQL의 실행 계획을 저장하고 관리하는 익스텐..

PostgreSQL 2025.07.10

PostgreSQL: Logical Replication

※ PostgreSQL: Logical Replication. 안녕하세요. 듀스트림입니다. 오늘 포스팅은 로지컬 레플리케이션에 대한 내용입니다. PostgreSQL 10버전에서 공식으로 도입되어 17버전까지 많은 개선이 있었습니다.버전내용10공식 Logical Replication 도입 - Publisher/Subscriber 구조의 publish/subscribe 모델 지원 - 테이블 단위 복제 가능 - DML(INSERT/UPDATE/DELETE) 복제 지원11- 시리얼 컬럼 지원 개선 - 복제 지연 모니터링 기능 추가 - 복제 가능한 테이블의 제약조건 관련 개선12- REPLICA IDENTITY FULL 없이도 REPLICA IDENTITY USING INDEX 지원 - 복제 구독시 초기 데이터 ..

PostgreSQL 2025.07.02

PostgreSQL: io_combine_limit

※ PostgreSQL: io_combine_limit. 안녕하세요. 듀스트림입니다. 오늘 포스팅은 PostgreSQL 17버전에서 도입된 GUC 설정인 io_combine_limit에 관한 내용입니다.1. io_combine_limit ?PostgreSQL 17에서 추가된 GUC 설정으로 preadv()를 활용한 병합 I/O 시 최대 바이트 수를 조절합니다.io_combine_limit는 러닝 타임에 변경할 수 있습니다.이를 통해 여러 데이터 페이지를 한 번에 읽어 시스템 호출 횟수와 디스크 오버헤드를 줄여 성능을 향상시킬 수 있습니다.io_combin_limit의 기본값은 '128kB'입니다.io_combin_limit 값은 'io_max_combine_limit' 값을 초과할 수 없습니다.io_ma..

PostgreSQL 2025.07.01

PostgreSQL: Partition

※ PostgreSQL: Partition. 안녕하세요. 듀스트림입니다. 오늘은 PostgreSQL의 파티션에 관한 내용입니다. 파티셔닝은 대규모 데이터베이스 시스템에서 성능 최적화, 데이터 관리 효율성 증대, 백업 및 복구 최적화 등 여러 측면에서 중요한 기능입니다. 그리고 가장 많이 궁금해하시는 오라클처럼 Parttion Exchange 명령은 안됩니다.우회 방안은 본문의 파티션 관리 부분 확인 부탁드립니다.1. 파티션 개요파티셔닝은 큰 테이블을 작은 파티션으로 나누어 데이터를 효율적으로 관리할 수 있게 해줍니다.파티셔닝된 테이블은 성능 향상뿐만 아니라 데이터 관리 및 유지보수 측면에서도 이점을 제공합니다. ▸ PostgreSQL에서는 다음과 같은 파티셔닝 기법을 지원합니다.Range Partitio..

PostgreSQL 2025.06.26

PostgreSQL: Lock

※ PostgreSQL: Lock. 안녕하세요. 듀스트림입니다. 오늘은 드디어 Lock에 관한 내용입니다.1. PostgreSQL Lock 처리 구조PostgreSQL에서 Lock은 내부적으로 LockManager에 의해 관리되며 동시성 제어, 무결성 보장, 데이터 경합 제어에 사용됩니다.주요 함수 설명단계함수설명소스 코드1LockAcquire()사용자가 요청한 Lock을 획득하는 진입점lock.c#L10242.1SetupLockInTable()Lock Tag에 해당하는 LOCK과 PROCLOCK 초기화lock.c#L11572.1.1GetLockHashPartition()Lock Tag에 따라 Hash 파티션 결정lock.c#L8092.1.2LockLookup()이미 존재하는 Lock 객체가 있는지 탐색..

PostgreSQL 2025.06.24

PostgreSQL: Disk I/O 및 WAL 흐름

※ PostgreSQL: Disk I/O and WAL Flow. 안녕하세요. 듀스트림입니다. 기능적인 요소도 중요하지만 엔진 파인 튜닝을 하기 위해서는 내부에서 어떻게 흘러가는지 아는 것도 중요합니다. 오늘의 포스팅은 PostgreSQL에서 데이터를 어떻게 처리하는지에 대한 내용입니다.PostgreSQL의 디스크 I/O 및 트랜잭션 로그 처리 구조는 shared_buffers, WAL buffers, OS page cache 그리고 디스크 계층 간의 정확한 흐름과 역할 분담을 기반으로 구성됩니다.1. PostgreSQL의 트랜잭션 처리 및 WAL 쓰기 흐름1. 클라이언트 SQL 요청 처리클라이언트로부터 SQL 쿼리가 PostgreSQL 백엔드 프로세스로 전달됩니다. 2. 데이터 페이지 접근 (share..

PostgreSQL 2025.06.11

PostgreSQL: Streaming Replication

※ PostgreSQL: Streaming Replication. 안녕하세요. 듀스트림입니다. 오늘 포스팅은 PostgreSQL에서 고가용성을 보장하는 핵심 기술인 스트리밍 레플리케이션에 관한 내용입니다.1. 스트리밍 레플리케이션 구조 및 핵심 프로세스기본 구성 요소구성 요소설명관련 소스 코드WALSenderPrimary 서버에서 WAL 로그를 Standby로 전송walsender.cWALReceiverStandby 서버에서 WAL 로그를 수신walreceiver.cStartupStandby 서버에서 WAL 로그를 적용startup.c 레플리케이션 동작 흐름Primary 서버에서 트랜잭션 실행 → WAL 기록WALSender가 WAL 데이터를 standby로 전송 (streaming)Standby의 WA..

PostgreSQL 2025.06.10

PostgreSQL: ROLE

※ PostgreSQL: ROLE. 안녕하세요. 듀스트림입니다. 오늘 포스팅은 PostgreSQL의 Role(User)에 관한 내용입니다.PostgreSQL에서 Role은 데이터베이스 사용자 또는 사용자 그룹을 의미합니다.각 역할은 데이터베이스 객체의 소유자가 될 수 있으며, 다른 역할에게 권한을 부여하거나 회수할 수 있습니다.또한 역할 간의 상속을 통해 권한을 계층적으로 관리할 수 있습니다. 일반적으로 LOGIN 속성을 설정한 Role을 사용자가 직접 접속하는 User로 사용하고, NOLOGIN 속성의 Role을 권한 관리용 Group Role로 사용합니다. 기본 구문은 아래와 같습니다.-- 사용자 역할 생성CREATE ROLE admin LOGIN PASSWORD 'password';-- 그룹 역할 ..

PostgreSQL 2025.06.09
728x90