PostgreSQL의 기본 개념과 함께 운영환경에서 데이터베이스 관리 및 성능 향상 경험을 공유하기 위한 Repository입니다. 산업의 역군에서 건설 분야의 '빅'데이터를 PostgreSQL 관계형 데이터베이스로 관리하며 얻은 실질적인 노하우와 성능 개선 방법을 기록하였습니다. 스타트업이 마주하는 자원의 한계 속에서도, 효율적인 자원 분배와 체계적인 모니터링을 통해 매일 수만 건의 데이터를 실시간으로 동기화하고, 수천만 건의 데이터를 효과적으로 조회하는 방법을 탐구합니다.
본 자료는 단순히 데이터베이스의 인덱스 설정이나 파티셔닝을 넘어, PostgreSQL의 구조와 원리를 정확히 이해하고 이를 바탕으로 최적화된 데이터베이스 설계 및 운영 전략을 마련하기 위한 것입니다. 이 과정에서 PostgreSQL 공식 문서를 근간으로 삼아, 기본 개념을 명확히 하고, 실제 운영 데이터를 기반으로 한 성능 개선 사례들을 공유하여, 다양한 DB 스펙과 데이터 양에 따른 최적화 방안을 제시하고자 합니다.
이 Repository는 계속해서 업데이트될 예정이며, 더 깊이 있는 정보와 경험을 공유하고자 합니다. 실제 적용 예제들은 junhkang.tistory.com에서 더욱 상세히 다루고 있으니 참고하시길 바랍니다.
- TOAST (The Oversized-Attribute Storage Technique)의 개념, PostgreSQL의 대용량 속성 저장 기법
- 2단계 커밋 프로토콜(Two-Phase Commit Protocol), Prepare transaction
- MVCC (Multi-Version Concurrency Control)
- PostgreSQL Lock이란? (조회 및 kill, Dead lock)
- Trigger, Procedure, Function (history 관리하기)
- Vacuum 개념 및 적절한 사용
- WAL (Write-Ahead Logging), 아카이브 모드 백업(Archive mode backup)의 개념 및 장단점
- 데이터베이스 상속(Inheritance)의 개념과 사용법 및 성능비교 (Inherits, Only)
- 뷰(VIEW) 테이블 개념 및 사용, 생성(CREATE), 수정(CREATE OR REPLACE), 삭제(DROP)
- 시퀀스(Sequence)의 개념과 사용법(생성, 삭제, 조회 등)
- 역할 및 권한 (ROLE, USER, GROUP) 개념 및 설정
- 외래키(Foreign Keys) 개념, 사용법, 장단점, 적용검토
- 윈도우 함수(Window Functions)의 개념, 성능 및 사용법 (over, sum, rank, ntitle, cume_dist 등...)
- 제약조건 (Constraint) 개념 및 설정 (Primary Keys, Foreign Keys, Unique, Not null, Check)
- 트랜잭션(Transaction)의 개념 및 사용
- 트랜잭션(Transaction)의 작동 원리
- 함수(Function)의 정의 및 상세 사용법 (다양한 예제)
- Planner, Optimizer (플래너, 옵티마이저)란? Planner, Optimizer (플래너, 옵티마이저)의 개념과 작동방식
- PostreSQL의 물리적 한계치
- Visibility Map(가시성 맵)의 개념, 원리, 생명주기 및 정보 확인 방법
- 인덱스 (index)
- 날짜 형태 검증하기 (ERROR date time field value out of range)
- 문자열내 중복 공백, 단어 제거
- CREATE TABLE AS (결과물을 테이블로)
- ERROR text search configuration name "english" must be schema-qualified
- DISK(디스크) 사용량 모니터링
- 페이징 - OFFSET과 LIMIT의 올바른 사용과 주의점
- UNION, INTERSECT, EXCEPT, SQL 쿼리 결합의 개념, 사용법 및 주의사항
- 고급 GROUPING 전략 - SETS, CUBE, ROLLUP의 개념, 효과적인 사용법 및 주의사항
- 버전 확인 - 필요성과 4가지 방법
- ROWNUM 사용과 순번 부여하기 - ROW_NUMBER(), RANK(), DENSE_RANK()
- 문자열에서 날짜, 시간 변환 및 처리 과정
- SUBSTRING, SUBSTR, 문자열 자르기
- 쿼리 성능향상 (실행계획 보는 법, 상세 확인방법, Explain의 어떤 지표를 봐야할까?)
- 미사용 인덱스(INDEX) 찾기 및 삭제, 성능향상
- Full Text Search를 활용한 데이터베이스 성능 향상
- 대량 데이터 인서트 시 성능 개선 및 주의사항
- 명시적 JOIN 절로 플래너(Planner) 제어, 성능 향상
- 인덱스(INDEX)와 정렬(ORDER BY), ORDER BY 성능개선, 효율적인 인덱스 적용
- Index-Only 스캔과 Covering 인덱스, Index-only스캔의 효율적인 사용
- RDS 쿼리 성능 분석 방법, pg_stat_statements 설치, 고려사항 및 주요 지표