728x90

PostgreSQL 90

PostgreSQL: ALTER TABLE ...

※ PostgreSQL: ALTER TABLE ... . 안녕하세요. 듀스트림입니다. 오늘 포스팅은 PostgreSQL에서 ALTER TABLE ... (특히 ALTER COLUMN)을 할 때, 내부적으로 어떤 일이 일어나는지에 대한 내용입니다. 운영하다 보면 그냥 한번씩 별일이 있습니다.먼저, REWRITE에 대해 알아야합니다.1. REWRITE란 무엇이며, 왜 위험할까요? Rewirte(테이블 재작성): 테이블의 새 사본을 만들어 데이터를 모두 재기록한 뒤 원자적으로 교체하는 동작입니다.이때 ACCESS EXCLUSIVE 급의 강한 락이 걸리고, 일시적으로 테이블 크기만큼 추가 디스크가 필요할 수 있습니다.MVCC 주의: Rewrite형 ALTER TABLE은 MVCC-세이프가 아니어서, 커밋 직후 ..

PostgreSQL 2025.10.31

PostgreSQL: 캐시 히트

※ PostgreSQL: Cache Hit (shared hit). 안녕하세요. 듀스트림입니다. 오늘 포스팅은 성능 관점 지표에서 매우 중요한 캐시 히트에 관한 내용입니다.1. 캐시 히트란?Shared Buffer Cache 안에서 이미 로드되어 있는 페이지를 다시 읽은 횟수입니다.즉, 디스크로부터 읽지 않고 메모리 내 캐시 버퍼에서 재사용된 페이지를 의미합니다. 그래서 "캐시 히트율이 높다"는 말은 디스크 I/O 없이 대부분의 데이터를 메모리에서 읽고 있다는 의미이며, 성능상으로 매우 좋은 현상입니다. (OLTP에서는 98% 이상을 목표로 합니다.) 실행계획에서는 shared hit로 출력됩니다.2. 캐시 히트율이 높을 때 가능한 해석관점캐시 히트율 높음의 의미해석DB 성능 관점디스크 I/O를 거의 하..

PostgreSQL 2025.10.29

PostgreSQL: Merge Join

※ PostgreSQL: Merge Join. 안녕하세요. 듀스트림입니다. 오늘 포스팅은 머지 조인에 대해 조금 더 풀어서 설명한 내용입니다. 조인에 대한 내용은 한번 포스팅한 적이 있는데 아래 링크 참고 부탁드립니다. PostgreSQL: 조인 알고리즘과 유형※ PostgreSQL: Join Algorithms and Types. 안녕하세요. 듀스트림입니다. 오늘은 PostgreSQL의 조인 알고리즘을 프로그래밍 관점에서 정리해 보겠습니다.PostgreSQL로 명시했지만, 알고리즘은 대부분의 DBMS에dewstream.tistory.com Merge Join + 추가 정렬은 비용이 큰 시나리오 중 하나로 반드시 튜닝해야합니다.특히, 인덱스 미비로 양쪽 테이블 풀 스캔 후 Sort 비용(O(n log n..

PostgreSQL 2025.10.22

PostgreSQL: ERROR [40001]: canceling statement due to conflict with recovery

※ ERROR: canceling statement due to conflict with recovery※ DETAIL: User was holding shared buffer pin for too long. 안녕하세요. 듀스트림입니다. 오늘 포스팅은 PostgerSQL HA 환경을 운영하다 보면 자주 만나게 되는 복구 충돌 오류(recovery conflict)에 대한 내용입니다.1. 발생 원인 요약Hot Standby 환경에서의 Read 쿼리 충돌슬레이브(standby) 노드에서 SELECT 같은 읽기 쿼리를 실행 중일 때, 동시에 마스터 노드에서는 해당 페이지를 변경하는 WAL 로그를 생성 및 전송합니다.슬레이브는 WAL을 즉시 replay해야 하지만, 해당 페이지가 읽히고 있어서 shared bu..

PostgreSQL 2025.10.20

PostgreSQL: Skip Locked

※ PostgreSQL: Skip Locked. 안녕하세요. 듀스트림입니다. 오늘 포스팅은 동시성이 필요한 환경에서 Row Lock 회피로 사용하는 Skip Locked에 대한 내용입니다. 이 포스팅을 왜 하냐면 티켓팅 실패해서 합니다..1. SKIP LOCKED?SKIP LOCKED는 ANSI SQL 표준은 아니며 PostgreSQL, Oracle, MySQL 등에서 확장 기능으로 지원합니다. PostgreSQL에서 SELECT ... FOR UPDATE로 특정 행을 잠그면, 다른 세션은 그 행이 풀릴 때까지 기다립니다.하지만 SKIP LOCKED 옵션을 붙이면 이미 잠긴 행은 건너뛰고 바로 다음 후보 행을 반환합니다.즉 대기/충돌 없이 안전하게 다른 데이터를 처리할 수 있습니다. (이미 다른 트랜잭션..

PostgreSQL 2025.09.17

PostgreSQL: 커넥션 풀

※ PostgreSQL: Connection Pool. 안녕하세요. 듀스트림입니다. 제가 운영 중인 OLTP 시스템은 초당 5,000건 이상의 트랜잭션을 처리하고 있습니다. 이런 환경에서 클라이언트가 매번 DBMS에 직접 연결을 맺는다면, 쿼리 실행 이전에 커넥션 생성/해제 비용만으로도 막대한 리소스가 낭비될 수 있습니다.오늘 포스팅에서는 커넥션 풀이 필요한 이유와 실제로 어떤 비용이 줄어드는지를 간단히 정리해 보겠습니다.커넥션 풀이란?커넥션을 미리 만들어 두고 필요할 때 재사용하는 기술입니다.쉽게 말하면 상담 창구를 상시 열어두고, 고객이 왔을 때 열려 있는 빈 상담 창구에서 바로 상담을 시작하는 것과 같습니다.1. 커넥션을 맺는 비용PostgreSQL에서 클라이언트가 새로운 커넥션을 만들면 내부적으로..

PostgreSQL 2025.09.15

PostgreSQL: LIKE vs ILIKE

※ PostgreSQL: LIKE vs ILIKE. 안녕하세요. 듀스트림입니다. 오늘 포스팅은 PostgreSQL에만 있는 문법인 ILIKE에 대한 내용입니다.1. ILIKE?ILIKE는 ANSI SQL 표준에는 존재하지 않는 PostgreSQL 확장 기능입니다.ILIKE는 LIKE와 동일한 패턴 매칭 문법을 사용하지만, 대소문자를 구분하지 않습니다(case-insenstive).간단하죠? 그냥 리눅스에서 grep 옵션 중 -i와 같은 기능입니다.2. 테스트▸ 테스트용 DDL, DML-- 테스트 테이블 생성CREATE TABLE users ( id SERIAL PRIMARY KEY, name TEXT);-- 테스트 데이터 삽입INSERT INTO users (name) VALUES('John'..

PostgreSQL 2025.09.12

PostgreSQL: 인덱스 - 연산자 클래스

※ Operator Class for Indexes in PostgreSQL. 안녕하세요. 듀스트림입니다. 운영 환경에서는 복잡한 비즈니스 로직이 들어간 SQL을 즉시 최적화해서 반영하기 어려울 때가 많습니다.그다음으로 효과적인 방법은 인덱스를 통한 데이터 액세스 최적화입니다. 그래서 우리는 인덱스에 대해 잘 알아야합니다. 오늘 포스팅은 PostgreSQL의 Index Operator Class에 대한 내용입니다. 여담으로 MySQL과 비교해 보자면, MySQL에는 PostgreSQL의 연산자 클래스와 같은 개념이 없습니다.대신 인덱스 생성 시 데이터 타입 + 인덱스 종류 + Collation 조합으로 동작 방식을 결정하며, 별도의 연산자 집합을 따로 정의하는 구조가 아닙니다. + 메커니즘 비교표구분Po..

PostgreSQL 2025.09.10

PostgreSQL: 데이터베이스 레벨 접근 권한 설정

※ PostgreSQL: Configuring Database-Level Access Privileges. 안녕하세요. 듀스트림입니다. 일하다 갑자기 슥 받은 질문이 있었는데, 아래 그림의 빨간 네모에 들어간 값이 뭘 의미하냐는 질문을 받았었습니다. 질문에 대한 대답은 "\l에서 보이는 Access privileges는 데이터베이스 레벨에서 설정된 접근 권한을 의미합니다."입니다. 그래서 하는 오늘의 포스팅은 Database-level Access privileges에 관한 내용입니다.1. Access privileges?Access privileges 컬럼에 표시되는 값은 GRANT를 통해 부여된 권한 리스트입니다. ▸ 의미는 아래와 같습니다:rolename=CTc/grantorrolename: 권한을..

PostgreSQL 2025.09.09

PostgreSQL: DBMS 성능 튜닝

※ PostgreSQL: DBMS Performance Tuning. 안녕하세요. 듀스트림입니다. 오늘 포스팅은 DBMS 성능 튜닝에 대해 이야기해보려고 합니다. 성능 튜닝은 시스템 레벨, 스키마 레벨, 쿼리 레벨이 있으며 쿼리 레벨부터 하나씩 정리해보겠습니다.1. 성능 튜닝의 목표성능 튜닝의 핵심 목표는 응답 속도 단축, 리소스 효율화, 데이터 처리량 증대입니다.성능 튜닝은 진단 → 분석 → 최적화 → 검증 순서로 진행하며, 아래 세 가지 측면에서 접근합니다.System-level (DB 서버/환경 튜닝)메모리(work_mem, shared_buffers)I/O, CPU, 병렬 처리VACUUM, ANALYZE, 통계 유지Schema-level (데이터 구조 최적화)테이블 구조, 컬럼 타입 최적화파티셔닝..

PostgreSQL 2025.09.02
728x90