SQL 13

PostgreSQL: 조인 알고리즘과 유형

※ PostgreSQL: Join Algorithms and Types. 안녕하세요. 듀스트림입니다. 오늘은 PostgreSQL의 조인 알고리즘을 프로그래밍 관점에서 정리해 보겠습니다.PostgreSQL로 명시했지만, 알고리즘은 대부분의 DBMS에서 유사합니다.1. 조인 알고리즘PostgreSQL은 세 가지 조인 알고리즘을 사용합니다.각 알고리즘은 데이터의 크기, 정렬 여부, 조인 조건 등에 따라 성능과 메모리 사용에 차이가 있습니다. 1.1. Nested Loop Join (중첩 반복 조인)동작 방식: 한 테이블의 각 행을 기준으로 다른 테이블의 모든 행을 순회하면서 조인 조건에 맞는 행을 찾습니다.드라이빙 테이블(Driving Table):외부 for문에서 순회하는 테이블로, 가능한 한 행 수가 적거..

PostgreSQL 2025.02.23

PostgreSQL: 표현식 인덱스

※ PostgreSQL: Indexes on Expressions. 안녕하세요. 듀스트림입니다. 오늘은 표현식(Expressions) 인덱스에 대해 알아보겠습니다. 11.7. Indexes on Expressions11.7. Indexes on Expressions # An index column need not be just a column of the underlying table, but can be …www.postgresql.org1. 표현식 인덱스?표현식 인덱스는 하나 이상의 열에 함수나 계산식을 적용한 결과를 인덱싱합니다.단순히 컬럼 자체가 아니라 그 컬럼에 특정 연산을 수행한 값을 미리 계산하여 인덱스로 저장하는 방식입니다. 예를 들면 아래와 같이 사용할 수 있습니다.케이스 무시 검색:이메..

PostgreSQL 2025.02.19

PostgreSQL: SQL Error [40001]

※ SQL Error [40001]: ERROR: canceling statement due to conflict with recovery. 안녕하세요. 듀스트림입니다. PostgreSQL 사용 시 자주 발생하는 오류도 하나씩 포스팅하려고 해요.SQL Error [40001]: ERROR: canceling statement due to conflict with recovery이 오류는 standby 서버에서 실행 중인 쿼리와 primary 서버의 WAL replay 작업 간에 충돌이 발생할 때, 데이터 일관성을 보장하기 위해 해당 쿼리를 강제로 취소하면서 발생합니다.1. 발생 원인• WAL replay와의 충돌: standby 서버는 primary 서버의 WAL을 적용하며 최신 상태를 유지합니다. 이 ..

PostgreSQL 2025.02.14

PostgreSQL: autovacuum 최적화

※ PostgreSQL: autovacuum optimization. 안녕하세요. 듀스트림입니다. PostgreSQL을 사용하시는 분들은 VACUUM 때문에 조금씩은 머리가 아프실 거에요.이번 포스팅은 유지관리에서 가장 신경써야할 것 중 하나인 autovacuum에 관한 내용입니다. 19.10. Automatic Vacuuming19.10. Automatic Vacuuming # These settings control the behavior of the autovacuum feature. Refer to Section 24.1.6 for more information. Note that …www.postgresql.org 오토배큠에 대한 PostgreSQL 공식 문서입니다. 네.. 저도 알아요. 여러분..

PostgreSQL 2025.02.14

PostgreSQL: 인덱스

※ Index in PostgreSQL. 안녕하세요. 듀스트림입니다. 설 연휴네요.그래서 그냥 쉬면서 인덱스에 대한 내용을 정리해봤습니다.1. 인덱스?인덱스는 데이터베이스 관리 시스템(DBMS)에서 데이터를 더 빠르고 효율적으로 검색하기 위해 사용되는 데이터 구조입니다.책의 목차처럼, 데이터가 저장된 위치를 미리 정리해 두어 원하는 데이터를 쉽게 찾을 수 있도록 도와줍니다.2. 인덱스의 특징• 빠른 데이터 검색: 테이블 전체를 검색(Full Table Scan)하는 대신, 인덱스를 사용하여 검색 시간을 단축합니다. • 데이터 정렬: 인덱스는 특정 컬럼을 기준으로 데이터를 정렬된 상태로 유지합니다. • 추가 저장 공간 필요: 인덱스를 저장하기 위한 추가적인 디스크 공간이 필요합니다. • 삽입/삭제/수정 시..

PostgreSQL 2025.01.28

PostgreSQL: 옵티마이저(플래너)

※ PostgreSQL: Optimizer(Planner).※ Version: PostgreSQL 16. 안녕하세요. 듀스트림입니다. 요즘 계속 튜닝의 연속인 나날을 보내고 있습니다. 그래서 작성하는 이번 포스팅은 PostgreSQL의 옵티마이저에 관한 내용입니다.1. 옵티마이저 단계 ① SQL Query → 사용자가 입력한 SQL 쿼리(SELECT, INSERT, UPDATE, DELETE 등)가 PostgreSQL로 전달됩니다. ② Parser (문법 분석) → SQL 구문을 파싱하여 내부적으로 “파스 트리(Parse Tree)”를 생성합니다. → 문법에 맞지 않으면 여기서 오류가 발생합니다. ③ Rewrite / Analyzer (Query Rewriter, Analyzer) → 뷰(View)나 규..

PostgreSQL 2025.01.14

PostgreSQL: 바인드 변수 실행 계획 최적화

※ PostgreSQL: Execution Plan Optimization for Bind Variables. 안녕하세요. 듀스트림입니다. 오늘도 재밌는 사례를 하나 가져왔습니다. 고객사에서 오래 걸리는 쿼리에 대해 진단 요청을 받아 방문했습니다. 진단 후, 엔진 및 인덱스 튜닝을 통해 쿼리 수행 시간을 4초에서 0.2초로 단축시켰습니다. 문제는 여기서 끝나지 않았습니다. 다음 날, 고객사로부터 다시 연락이 왔습니다. "튜닝 후 DB 서버에서 수행할 때는 분명 빠른데, APP에서는 여전히 느립니다." 상황을 듣자마자 떠오르는 게 하나 있어서 질문을 던졌습니다. "바인드 변수를 사용하고 계신가요?" 예상대로 바인드 변수를 사용하고 있었습니다. 이번 포스팅에서는 바인드 변수를 PostgreSQL 엔진 관점에..

PostgreSQL 2025.01.10

PostgreSQL: PG ↔ Oracle 이관 시 메타데이터 정합성 체크 쿼리

※ Metadata integrity check methods during migration from PostgreSQL ↔ Oracle.PostgreSQL 체크용 쿼리-- 1.스키마별 디스크 사용량SELECT schema_name, pg_size_pretty(sum(table_size)::bigint) as disk_spaceFROM (SELECT pg_catalog.pg_namespace.nspname as schema_name, pg_relation_size(pg_catalog.pg_class.oid) as table_size FROM pg_catalog.pg_class JOIN pg_catalog.pg_namespace ON relnamespace = pg_catalog.pg..

PostgreSQL 2025.01.05

PostgreSQL(ANSI SQL): CTE와 서브쿼리 비교

※ PostgreSQL: ANSI SQL: Comparison of CTE(Common Table Expression) and Subquery. 안녕하세요. 듀스트림입니다. 새해 복 많이 받으세요. 2025년의 첫 포스팅은 많이 사용되는 CTE(Common Table Expression)와 서브쿼리(Subquery)의 차이를 살펴보도록 하겠습니다.1. CTE와 서브쿼리의 차이점항목CTE서브쿼리가독성직관적복잡한 구조일수록 어려워짐재사용성동일 CTE를 여러 번 참조 가능재사용 불가디버깅 용이성각 CTE 단위로 결과를 쉽게 디버깅 가능서브쿼리 단위로 디버깅하기는 어려움성능반복 참조가 필요한 경우 우수단순 필터링, 작은 데이터 셋, 중첩 구조가 단순한 경우 우수코드 구조명시적으로 분리된 블록 구조메인 쿼리 내에..

SQL 2025.01.02