728x90

2025/10 8

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

SQL: 상관관계(상관 서브쿼리)

※ SQL: Correlation. (Correlated subquery) 안녕하세요. 듀스트림입니다. 오늘 포스팅은 상관 서브쿼리에 관련된 내용입니다.SQL에서 상관관계(Correlation)란?주로 상관 서브쿼리(correlated subquery)를 의미하며,"서브쿼리가 실행될 때, 바깥 쿼리의 컬럼을 참조하는 관계"를 말합니다.즉, 서브쿼리가 독립적으로 실행되지 못하고,외부 쿼리의 각 행에 대해 내부 쿼리가 반복적으로 실행되는 구조를 의미합니다.1. 비상관 서브쿼리 (Non-correlated Subquery) 서브쿼리가 독립적으로 실행 가능합니다.SELECT emp_name, salaryFROM empWHERE salary > (SELECT AVG(salary) FROM emp);(SELECT ..

SQL 2025.10.27

SQL: 실행 순서

※ SQL: Order of Execution. 안녕하세요. 듀스트림입니다. 오늘은 초급 개발자분들이 보시면 많은 도움이 될 내용인 SQL 실행 순서에 대한 내용입니다.1. 우리가 코드로 작성할 때 사용하는 문법적 순서SELECT → FROM →JOIN→ON→WHERE → GROUP BY → HAVING → ORDER BY → LIMIT2. 실행 순서 (논리적 평가 순서)FROM → ON → JOIN → WHERE → GROUP BY → HAVING → SELECT → (WINDOW) → DISTINCT → ORDER BY → LIMIT ※ LATERAL은 FROM 평가 중에 실행됩니다.3. 물리적 실행 순서(실행계획)옵티마이저가 실제로 선택한 방식(NL/Hash/Sort 등).→ 물리적 실행은 최적화를..

SQL 2025.10.24

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

SQL: EXISTS / NOT EXISTS

※ SQL: EXISTS / NOT EXISTS. 안녕하세요. 듀스트림입니다. 오늘 포스팅은 predicate 구문인 EXISTS / NOT EXISTS에 대한 내용입니다.Predicate 구문?• SQL에서 TRUE / FALSE / UNKNOWN 중 하나로 평가되는 논리식(logical expression)을 뜻합니다.• WHERE, HAVING, ON 절 안에서 사용되어 어떤 행을 선택(필터링) 할지를 결정합니다.※ ON절은 문법적으로 가능은 하지만 의미적으로 맞지 않아 실제로 사용하지는 않습니다.1. EXISTS / NOT EXISTSEXISTS / NOT EXISTS는 "조건이 참인가?"를 판별하는 불리언 평가식(Boolean predicate)이고 데이터를 반환하지 않습니다. EXISTS:..

SQL 2025.10.15

SQL: ASC, DESC

※ SQL: ASC, DESC. 안녕하세요. 듀스트림입니다. 오늘 포스팅은 반드시 꼭! 알아야 되는 정렬 순서에 대한 내용입니다. ASC와 DESC는 SQL에서 정렬 순서(ordering direction) 를 지정할 때 사용하는 키워드입니다.보통 ORDER BY 절과 함께 사용되며, 결과를 오름차순(ascending) 또는 내림차순(descending)으로 정렬합니다.1. ASC (Ascending Order)의미: 오름차순 정렬 (작은 값 → 큰 값)숫자: 1, 2, 3, 4 …문자: A, B, C …날짜: 오래된 날짜 → 최근 날짜기본값이므로 ASC는 생략해도 동일하게 동작합니다.SELECT name, ageFROM employeeORDER BY age ASC;-- 아래처럼 생략해도 동일한 의미입니..

SQL 2025.10.13
728x90