DB/Postgresql 9

Postgresql - Sharding

Postgresql의 샤드Sharding은 성능, 확장성 및 가용성을 향상시키기 위해 여러 서버 (또는 노드)에 데이터를 배포하는 데이터베이스 파티셔닝 기술모든 데이터를 단일 데이터베이스 인스턴스에 저장하는 대신 Sharding은 이를 더 작고 관리하기 쉬운 청크로 나s눈다.샤드의 주요 구성 요소샤드 key샤드 (예 : 사용자 ID, 지역 등)에 데이터를 배포하는 데 사용되는 열 (또는 열 세트).코디네이터 (라우터)샤드 키를 기반으로 쿼리를 올바른 샤드로 구동. (수동 / pgbouncer / citus 와 같은 관리 툴)샤드 노드각 노드 (데이터베이스 서버)는 데이터의 일부를 저장노드는 쿼리를 처리하기 위해 독립적으로 작동샤드 전략해시 기반 샤딩샤드 키 값은 해시되어 샤드 위치를 결정데이터 배포를 보..

DB/Postgresql 2025.02.23

DB - partition 수평/수직 분할

데이터베이스 분할(Partitioning)? 데이터베이스 분할은 데이터를 여러 개의 작은 조각으로 나누는 작업으로 이렇게 분할된 데이터들은 데이터 관리 용이성, 성능, 가용성 등의 향상을 위해 사용되며 분할된 각 부분을 '파티션'이라고 부른다.  분할기법 종류 수평 분할 (Horizontal Partitioning)수평 분할은 데이터베이스의 테이블을 행(Row) 단위로 나누는 것을 의미한다.예를 들어, 가상의 "고객 정보"라는 테이블에 각 고객의 이름, 나이, 주소, 이메일 등이 저장되어 있고, 이 "고객 정보" 테이블을 수평 분할하려고 하는 경우지역별로 분할: 고객 정보를 한 지역에 사는 고객들과 다른 지역에 사는 고객들로 나눈다. 예를 들어, 한 테이블은 미국 고객의 정보만을 포함하고, 다른 테이블은..

DB/Postgresql 2024.05.22

Undo, Redo segment

Redo는 데이터베이스의 변경 사항을 로깅하는 부분 Undo는 각 트랜잭션이 가한 변경 사항을 로깅하는 부분 1. 일반 세그먼트와 동일하다. Extend 단위로 확장된다. 버퍼 캐시에 데이터를 캐싱한다. 변경사항을 Redo 로깅한다. 2. 트랜잭션 별로 Undo 세그먼트가 할당된다. 변경 사항이 Undo 레코드 단위로 기록된다. 복수 트랜잭션이 한 Undo 세그먼트를 공유할 수 있다. (트랜잭션 : Undo 세그먼트) = (N : 1) 출처 : https://velog.io/@yooha9621/1-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%AA%A8%EB%8D%B8%EB%A7%81%EC%9D%98-%EC%9D%B4%ED%95%B45.-Undo

DB/Postgresql 2024.04.14

MVCC

대부분의 DBMS에서 동시성을 위해 제공하는 MVCC(Multi-Version Concurrency Control) 기능은 동시에 여러 트랜잭션이 수행되는 환경에서 각 트랜잭션에게 쿼리 수행 시점의 데이터를 제공하여 읽기 일관성을 보장하고 Read/Write 간의 충돌 및 lock을 방지하여 동시성을 높일 수 있는 기능으로, 모든 MVCC의 기본 원리는 트랜잭션이 시작된 시점의 Transaction ID와 같거나 작은 Transacion ID를 가지는 데이터를 읽는 것. 출처 : https://techblog.woowahan.com/9478/

DB/Postgresql 2024.04.11

postgresql - vacuum

vacuum의 주요 4가지 작업 임계치 이상으로 발생한 Dead Tuple을 정리하여 FSM (Free Space Map) 으로 반환 Transaction ID Wraparound 방지 통계정보 갱신 visibility map을 갱신하여 index scan 성능 향상 출처 : https://techblog.woowahan.com/9478/ [실무에서 사용했던 경험(과거 데이터 삭제)] 파티션 테이블의 경우 drop partition으로 원하는 데이터를 삭제하면 즉시 db용량이 확보되지만, 파티션 테이블이 아닌 경우는 delete로 데이터를 삭제해도 용량 확보가 바로 되지 않는다. why? delete를 하더라도 기존에 insert됐던 데이터 볼륨을 그대로 유지하게 된다. 이를 해결하기 위한 명령어가 va..

DB/Postgresql 2024.04.11

Window 함수

UV집계 프로그램에서 쿼리 최적화를 하기 위해 사용. 관련되어 공부했던 내용 기록. window함수란?전체 테이블에서 분석하고 싶은 작은 범위를 정해 조회. window 함수 종류순위함수-rank : 동률이 있다면 다음숫자로 건너 뜀. ex) 1,2,3,3,5-dense_rank : 동률이 있어도 건너 뛰지 않음. ex) 1,2,2,3-row_number : 동률이 나오지 않는 rank함수(동률이더라도 먼저 조회된 순서로 rank가 매겨짐) ex)1,2,3,4,5 집계함수-sum, max, min, avg.count 행순서 함수-first_value, last_value, lag, lead 비율함수-ratio_to,report, percent_rank, cume_dist, ntile ex) ROW_NUM..

DB/Postgresql 2024.04.09

SQL - Explain

explain이란? 쿼리문에 대해서 PostgreSQL 실행계획기가 만든 실행 계획을 보여준다. 어떤 테이블이 테이블 전체 순차 검색을 하는지, 인덱스 검색을 하는지를 보여준다. 또한 여러 테이블이 조인이 될 경우 그 각 테이블들의 조인 알고리즘은 어떤 것을 사용할 것인지를 보여준다. analyze (Explain 옵션) ANALYZE 옵션을 사용하면, 실제 해당 쿼리를 실행하고, 추청 비용과 함께 소요 비용, 소요 시간도 실제 처리된 각 계획 노드별 전체 로우 수도 보여준다. 이 옵션은 실행계획기가 추정하는 작업이 실 작업과 비교해서 얼마나 정확한지를 확인하는데 유용하게 사용된다. ※ analyze옵션 사용시 실제로 쿼리가 실행되기 때문에 운영DB라면 io상태 및 사이드 이펙트 점검 후 실행하여야 한다..

DB/Postgresql 2024.04.09

DB index

Index란? 데이터베이스 인덱스는 쓰기 작업 중 추가 공간과 성능 감소를 희생하여 데이터베이스 테이블에 대한 데이터 검색 작업 속도를 향상시키는 데이터 구조이다. 데이터베이스에서 인덱스를 사용하면 데이터베이스 엔진이 특정 검색 기준과 일치하는 테이블의 행을 빠르게 찾거나 특정 열을 기반으로 행을 효율적으로 정렬할 수 있다. ※별도의 인덱스 저장공간이 추가로 필요하기 때문에 최적화가 중요하다.

DB/Postgresql 2024.04.08

파티션 및 analyze

partition이란? 파티셔닝이란 논리적으로 존재하는 거대한 테이블을 쪼개서 물리적으로 작은 테이블 조각들로 만드는 것 partition 장점? 1. 인덱스의 크기 거대한 테이블에 특정 컬럼에 인덱스를 생성하는 경우가 많습니다. 문제는 이 테이블이 너무 크다보니, 인덱스도 덩달아 크기가 커집니다. 이러면 index scan 을 위해 메모리에 인덱스를 올릴 때 많은 메모리를 소비하게 됩니다. 하지만 파티션을 통해서 거대한 table 을 쪼개면 각각의 table 단위로 인덱스가 생성되서 인덱스의 크기가 작아집니다. 덕분에 index scan 을 위해서 index 정보를 메모리에 올리는 IO 작업이 줄어듭니다. 2. sequential scan 이미 알고 있겠지만, 어떤 테이블에서 조건절을 쓰더라도 대부분의..

DB/Postgresql 2024.04.08