본문 바로가기

PostgreSQL

(17)
PostgreSQL slow query – Cloudwatch 연동 RDS의 데이터베이스 옵션에서 Cloudwatch Logs로 보낼 수 있도록 설정.
PostgreSQL – Grafana 연동 설치하기 전 git, make, go 패키지 설치 # yum install git # yum install make # yum install go git에서 postgres_exporter 가져옴 # git clone https://github.com/prometheus-community/postgres_exporter.git 폴더로 이동 후 빌드 # cd postgres_exporter # make build 데이터 소스 환경 변수 설정 및 실행 # export DATA_SOURCE_NAME=postgresql://어드민계정:어드민비밀번호@RDS_ENDPOINT:5432/접속DB?sslmode=disable # . /postgres_exporter Prometheus에 pgexporter Job 등록 ..
PostgreSQL 파티션 PostgreSQL 파티션 ▪ 상속 (Inherits)을 이용해서 파티션을 구현함 ▪ 인덱스 정보는 상속되지 않음 ▪ Trigger를 이용해서 파티션 Pruning을 처리함 ▪ 파티션 생성 시에 CHECK 조건을 이용함 ▪ Range, List 파티션을 제공함 ▪ Global Index는 제공하지 않음 ▪ 입력 조건에 맞는 파티션만 액세스하는 것을 ‘파티션 Pruning’이라고 한다. ▪ 이를 위해서는 constraint_exclusion 파라미터를 ‘on’ 또는 ‘partition’으로 설정해야 한다. (기본 설정값: partition) ▪ CHECK 조건을 입력하면 정상적으로 파티션 Pruning이 수행된다. 서브 파티션을 이용한 튜닝 방안 ▪ 1차 파티션을 통해 IO 범위를 줄인 후에도 여전히 IO..
Parallel Processing (병렬 처리) Parallel Processing ▪ PostgreSQL 9.6 부터 병렬 처리를 지원한다. ▪ 병렬 처리는 Parallel Scan, Parallel Group by, Parallel Join을 지원한다. ▪ ORACLE과 같은 생산자-소비자 모델은 아니다. Worker 프로세스 개수 산정 방식 ▪ Worker 프로세스의 개수는 min_parallel_relation_size 파라미터값을 기준으로 산정한다. ▪ 기준 크기의 3배 단위로 1개씩 증가하며, 최대 7개이다. Parallel Index Scan ▪ PostgreSQL 10부터는 Parallel Index Scan 기능을 제공한다. ▪ Parallel Index Scan 기능은 Index Full Scan 뿐만 아니라 Index Range S..
BRIN BRIN ▪ BRIN은 PostgreSQL 9.5부터 제공되는 인덱스 유형이다. ▪ BRIN은 블록 내의 MIN/MAX 값을 이용해서 블록 단위로 인덱싱한다. ▪ 이로 인해 인덱스 크기는 매우 작아진다는 장점이 있다. 이러한 장점으로 인해, 디스크 공간이 부족한 경우에는 BRIN을 선택하기도 한다. ▪ BRIN과 EXADATA의 Storage 인덱스는 매우 흡사하다 BRIN의 특성 ▪ BRIN의 크기는 매우 작다. 예를 들어, 1Gb 테이블인 경우에 BRIN의 크기는 6블록이다. (1MB 단위로 1개의 Min/Max 값을 저장하기 때문이다) ▪ 1건을 읽어도 128 블록 (1 MB)를 읽는다. ▪ BRIN은 Index Only Scan 방식보다는 느리다. 왜냐면 반드시 테이블을 액세스하기 때문이다. ▪ ..
힌트의 필요성과 PG_HINT_PLAN 힌트의 필요성과 PG_HINT_PLAN ▪ 특정 인덱스를 지정하거나, 조인 순서를 지정하거나, 여러 개의 테이블 간의 조인 방법을 각 조인마다 다르게 선택하는 것을 사용자가 지정할 수 있다면, 이는 매우 강력한 무기일 것이다. ▪ ORACLE은 Hint를 이용해서 이러한 작업을 수행할 수 있다. ▪ 다행히 PG_HINT_PLAN 이란 기능이 제공된다. ▪ 이는 Hint 가 아니라 Plan Tree 자체를 변경하는 기법이다. ▪ 따라서 Hint와 달리 Optimizer는 PG_HINT_PLAN을 무시할 수 없다. ▪ 즉, 매우 강력하면서도 위험한 무기인 셈이다. PG_HINT_PLAN 설치 PG_HINT_PLAN이 제공하는 Hint들
Query Rewrite (쿼리 변환) ▪ 사용자가 작성한 쿼리를 Optimizer가 더 좋은 실행계획을 수립할 수 있는 형태로 변경하는 것을 Query Rewrite라고 한다. 1) 서브 쿼리 Collapse : 서브 쿼리를 Main 쿼리에 병합하는 기법 (Sub query unnest) 2) View Merging : 뷰 또는 인라인 뷰를 풀어헤쳐 테이블 간의 조인으로 변경하는 방법 3) JPPD(조인 조건 push down) : View Merging이 실패한 경우, 조인 조건을 뷰 내부로 밀어 넣는 방법 View Merging ▪ 뷰를 풀어헤쳐서 테이블 간의 조인으로 변경함으로써 , 다양한 조인 순서와 조인 방법을 선택할 수 있다. 이때 View는 2개로 구분된다. ▪ Simple View는 항상 View Merging에 성공한다. ▪..
JOIN PostgreSQL에서 지원하는 조인 방법 ▪ Nested Loop 조인 ▪ Sort Merge 조인 ▪ 해시 조인 (Hybrid 해시 조인 지원) Nested Loop Join NL 조인 시에 Materialize가 발생하면 인덱스 생성을 고려해야 한다. ▪ NL 조인 시에 연결 고리에 인덱스가 없으면 Materialize 오퍼레이션이 발생할 수 있다. ▪ 이는 보완책이지 해결책이 아니다. 따라서 인덱스 생성을 고려해야 한다 Hash Join ▪ 해시 조인은 해시 함수를 이용한다. 해시 함수(h)는 다음과 같은 특성을 갖는다. 1. X=Y이면 반드시 h(X)=h(Y) 이다. 2. h(X)≠h(Y)이면 반드시 X≠Y 이다. 3. X≠Y이면 h(X)≠h(Y)인 것이 가장 이상적이다. 4. X≠Y이면 h(X..