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(Multi-Version Concurrency Control) 구조를 사용하기 때문에, UPDATE가 발생할 때 기존 튜플을 직접 수정하지 않습니다. 대신 기존 튜플은 그대로 두고 새로운 버전의 튜플을 추가로 생성합니다. 이러한 방식에서 일반적인 Non-HOT 업데이트는 다음과 같은 비용을 수반합니다.새로운 heap tuple 생성해당 row를 참조하는 모든 인덱스에 새로운 index entry 추가WA..

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