2025/06 8

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

MySQL: RHEL 기반 Linux에 MySQL 설치 방법

※ Installing MySQL 8.0 on Linux from source.※ Version: Linux 8.10 (Rocky), MySQL 8.0.※ 싱글 환경은 CPU 2Core, Memory 4GB 이상을 권장합니다. 안녕하세요. 듀스트림입니다. 오늘 포스팅은 MySQL InnoDB 스토리지 엔진 설치 방법입니다. InnoDB로 세팅하는 이유는 InnoDB만 트랜잭션 지원을 합니다. 그래서 실무에서는 InnoDB만 사용합니다. + MySQL 스토리지 엔진 종류엔진특징트랜잭션 지원주 용도InnoDB디스크 기반, ACID, MVCC, 외래키 지원✅기본 엔진, 대부분의 OLTPMyISAM오래된 엔진, 빠르지만 트랜잭션 없음❌읽기 전용/가벼운 작업MEMORY메모리 기반, 속도 빠름, 휘발성❌임시 테이블..

MySQL 2025.06.20

PostgreSQL: credcheck

※ PostgreSQL: credcheck. 안녕하세요. 듀스트림입니다. 보안 요구 조건에 따라 DBMS에서도 Password 정책을 설정해야 할 때가 있습니다. 기본으로 제공되는 passowrdcheck의 경우 정말 단순한 기능만을 지원하기 때문에 더 강력한 보안 기능이 필요할 때 사용하는 확장 기능인 credcheck에 대해 알아보겠습니다.1. credcheck?credcheck는 PostgreSQL에서 사용자의 비밀번호 및 계정 생성 시 복잡도, 재사용, 만료, 인증 실패 제어 등의 고급 정책을 적용할 수 있게 해주는 Extension입니다. (PostgreSQL 12 이상 지원)vs passwordcheck항목passwordcheckcredcheck제공 방식PostgreSQL 내장 (contrib..

PostgreSQL 2025.06.17

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

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