728x90

분류 전체보기 146

SQL: 날짜 조건 최적화

※ SQL: Date Condition Optimization. 안녕하세요. 듀스트림입니다. 오랜만에 튜닝 사례를 가져왔습니다. 운영 중 긴급 배포된 쿼리로 인해 Disk I/O 사용률이 장시간 100%로 유지되는 문제가 발생했습니다. 원인을 확인해보니, 날짜 조건에 TO_CHAR() 함수가 사용되고 있었습니다.그 결과 대량의 데이터 스캔이 발생했고, 읽기 병목으로 이어졌습니다. 1. AS-IS (문제 상황)문제가 된 조건은 다음과 같습니다.-- 1번 쿼리 조건절TO_CHAR(created_at, 'YYYY-MM-DD') = '2026-04-13'-- 2번 쿼리 조인 조건절TO_CHAR(a.created_at, 'YYYY-MM-DD') = TO_CHAR(b.created_at, 'YYYY-MM-DD')c..

SQL 2026.04.20

Linux: Disk I/O 분석 스크립트

※ Linux: Disk I/O analysis script . 안녕하세요. 듀스트림입니다. 시스템을 운영하다 보면 Disk I/O를 체크해야 될 때가 있습니다. 물론 모니터링에서 찍어주지만, 조금 더 실시간성으로 정밀하게 분석해야 될 때 사용하시면 됩니다.분석 Shell-scripts아래 스크립트는 /proc/diskstats를 두 번 읽고, 각 디바이스에 대해 r/s, w/s, rkB/s, wkB/s, r_await, w_await, util%, avgqu를 계산하는 스크립트입니다.#!/usr/bin/env bashset -uINTERVAL="${1:-1}"DEVICE_REGEX="${2:-^(sd[a-z]+|vd[a-z]+|xvd[a-z]+|nvme[0-9]+n[0-9]+|dm-[0-9]+)$}"T..

Linux 2026.04.08

PostgreSQL: fillfactor

※ PostgreSQL: fillfactor. 안녕하세요. 듀스트림입니다. fillfactor는 단순히 페이지 저장 밀도를 조정하는 옵션처럼 보일 수 있지만, 실제로는 PostgreSQL의 UPDATE 처리 방식과 밀접하게 연결되어 있습니다.특히 HOT (Heap-Only Tuple) 업데이트 가능 여부, 인덱스 page split 빈도, bloat 증가 양상, VACUUM 및 autovacuum 효율에 직접적인 영향을 줄 수 있습니다. 결국 fillfactor는 UPDATE가 빈번한 테이블과 인덱스의 성능, 저장 공간 활용, 유지보수 비용까지 함께 좌우하는 중요한 튜닝 파라미터입니다. 이번 글에서는 MVCC와 UPDATE, HOT의 핵심 배경만 필요한 수준으로 짚은 뒤, fillfactor가 실제 성능..

PostgreSQL 2026.03.18

PostgreSQL: DEFAULT PRIVILEGES

※ PostgreSQL: DEFAULT PRIVILEGES. 안녕하세요. 듀스트림입니다. PostgreSQL의 권한 설계는 다른 DBMS(MySQL/MariaDB 등)에 비해 상대적으로 복잡한 편입니다. (Oracle과는 비슷합니다.) 그 이유로는 먼저, PostgreSQL 철학에서 USER는 LOGIN 가능한 ROLE 일뿐입니다. 다음으로 권한 모델 구조를 보면, 다음과 같이 계층적 구조가 아닌 분리형 구조로 되어 있습니다.Database └─ Schema └─ Table / View / Sequence / Function / Type …→ 여기서 중요한 점은 상위 객체에 권한을 부여해도, 하위 객체 권한이 자동으로 따라오지 않는다는 점입니다. Database에 CONNECT 권한을 부여하고 해..

PostgreSQL 2025.12.31

PostgreSQL: pg_mooncake

※ PostgreSQL: pg_mooncake. 안녕하세요. 듀스트림입니다. 크리스마스 이브입니다. 미리 크리스마스🎄 오늘 포스팅에서는 최근 분석 엔진으로 주목받고 있는 DuckDB를 PostgreSQL 환경에서 네이티브하게 활용할 수 있도록 지원하는 Extension인 pg_mooncake에 대한 내용입니다.1. pg_mooncake ?pg_mooncake는 PostgreSQL 테이블을 Iceberg 기반 컬럼 지향 스토리지로 미러링하여, Sub-second 수준의 최신성(freshness)을 유지하면서 고속 분석 쿼리를 가능하게 하는PostgreSQL Extension입니다. pg_mooncake의 특징컬럼스토어 미러링 구조 pg_mooncake는 PostgreSQL 테이블을 Iceberg 기반 컬..

PostgreSQL 2025.12.24

PostgreSQL: PgBouncer

※ PostgreSQL: PgBouncer. 안녕하세요. 듀스트림입니다. 오늘 포스팅은 PostgreSQL의 커넥션 풀러 중 하나인 PgBouncer의 개요부터 설치, 튜닝까지의 내용입니다. 커넥션 풀에 대한 개념 및 내용은 아래 포스팅을 참고 부탁드립니다. PostgreSQL: 커넥션 풀※ PostgreSQL: Connection Pool. 안녕하세요. 듀스트림입니다. 제가 운영 중인 OLTP 시스템은 초당 5,000건 이상의 트랜잭션을 처리하고 있습니다. 이런 환경에서 클라이언트가 매번 DBMS에 직접 연결을 맺dewstream.tistory.com1. PgBouncer ?PgBouncer는 PostgreSQL 전용의 초경량(Connection Pooler) 미들웨어로, 애플리케이션과 PostgreS..

PostgreSQL 2025.12.17

PostgreSQL: Patroni Cluster 사용 시 파라미터 변경 방법

※ PostgreSQL: Managing Parameter Changes in a Patroni Cluster. 안녕하세요. 듀스트림입니다. 요즘은 뭔가 테스트를 하고 싶어도 시간이 없어서 못하는 거 같아요. 7시반 출근 → 21시 퇴근 → 22시 반 집도착 → 씻고 자고 반복~ 오늘 주제는 Patroni Cluster 운영 시 꼭 알아야 되는 내용인 Patroni Cluster를 운영 시, DB 파라미터 변경 방법입니다. (Patroni 공식 문서)PostgreSQL 단독 인스턴스나 다른 HA 도구라면 postgresql.conf 수정 + Reload 또는 Restart로 파라미터를 적용하면 됩니다.하지만 Patroni로 HA Cluster를 운영 중이라면 이야기가 완전히 달라집니다. postgresq..

PostgreSQL 2025.12.12

RDBMS: FOREIGN KEY

※ RDBMS: FOREIGN KEY. 안녕하세요. 듀스트림입니다. 저는 이직하고 계속 야근과 주말 작업이 너무 많아서 지쳐가는 중입니다.. (조금 편한 자리로 갈 걸 그랬나 싶기도 해요..) 오늘 포스팅은 RDBMS를 사용한다면 꼭 알아야 하는 외래키(FOREIGN KEY)에 대한 내용입니다. 외래키는 그냥 FK 한 줄 추가하는 기능이 아니라,데이터 모델의 품질과 애플리케이션 안정성, 운영상의 성능과 락 구조까지 모두 연결되는 핵심 요소입니다. 1. RDBMS에서 왜 외래키가 중요할까요?관계형 DB에서 관계(relation)를 실제로 강제하는 장치가 외래키(FOREIGN KEY, FK) 입니다.부모(Parent) 테이블: 기준(참조 대상)이 되는 테이블 (보통 PK/UK를 가진 쪽)자식(Child) 테..

IT 여러가지 2025.11.28
728x90