DB/PostgreSQL 17

Unlogged Table 정의

1. UNLOGGED TABLE의 정의UNLOGGED TABLE은 말 그대로 로그를 남기지 않는 테이블이다.일반 테이블은 데이터를 수정할 때마다 WAL 로그를 기록하여 장애 복구, 복제 등에 활용되지만,UNLOGGED 테이블은 WAL을 생략하고 디스크에만 데이터를 직접 저장한다.특징 요약WAL 기록하지 않음 (복구 불가)성능빠름 (WAL 생략으로 I/O 감소)장애 시 복구불가 (DB 재시작 시 데이터 유실)분산 및 병렬 처리Greenplum에서는 segment별 분산 처리 가능인덱스, 제약 조건일반 테이블처럼 사용 가능외부 테이블과 호환INSERT 대상 등으로 사용 가능사용 방법테이블 생성 예시-- 일반 테이블CREATE TABLE normal_table ( id SERIAL, name TEX..

DB/PostgreSQL 2025.04.22

External table (PXF 기반) 에서 데이터 읽어올 때 - 메모리. I/O 문제

PXF 프레임워크를 사용해서 External table 생성하는 경우 PXF 설명 : https://cool-ri.tistory.com/6 Greenplum PXFGreenplum PXF : Greenplum이 아닌 외부시스템에서 가지고 있는 DATA 를 Greenplum 으로 Load 할 수 있는 프레임워크 외부시스템 DATA는 ORACLE, Mariadb 처럼 RDBMS의 테이블이 될 수 있으며 하둡의 HDFS, 파일시스cool-ri.tistory.com 디스크에 저장된 deflate/csv 파일을 즉석에서 읽어서 GPDB 로 스트리밍처럼 처리함.-> 테이블처럼 보이지만 실제로는 파일을 직접 읽어옴 항목External Table내부 Table (heap/append-optimized)데이터 위치외부..

DB/PostgreSQL 2025.04.21

쿼리 튜닝 - 플랜 분석 예시 (memory 부족)

쿼리redistribute motion 1:48 (slice4; segments: 1) (cost=0.00...)(actual time=.. rows=4530430 loops=1)  hash key: "outer".?column?    ->Result (..)      ->WindowAgg (cost..)         Partition by: (CASHE WHEN ..)         -> Sort (..             Sort Key: (CASE ..             Sort Method: external sort Disk: 2059808kB           -> Result..             ->GroupAggregate...                 ->Hash JOin ..

DB/PostgreSQL 2025.02.18

cgroup

**cgroup(Control Groups)**은 Linux 커널의 기능 중 하나로, 프로세스 그룹별로 시스템 자원을 제한하고, 우선순위를 지정하며, 관리할 수 있게 해줍니다. cgroup은 특히 컨테이너화된 환경(Docker, Kubernetes)이나 리소스 관리가 중요한 환경(Greenplum Database 등)에서 자주 사용됩니다.cgroup의 주요 기능자원 제한(Resource Limiting)프로세스 그룹이 사용할 수 있는 CPU, 메모리, 블록 I/O, 네트워크 대역폭 등을 제한할 수 있습니다.예를 들어, 특정 프로세스가 사용할 수 있는 최대 메모리 용량을 설정하거나, CPU 사용률을 제한할 수 있습니다.자원 계측(Resource Accounting)프로세스 그룹별로 자원 사용량(CPU 시간..

DB/PostgreSQL 2024.11.18

GPDB - Query Plan 예시

주문이 2024년 1월에 이루어지고 총 금액이 $100 이상인 고객의 이름과 해당 기간의 총 주문 금액을 계산하는 쿼리이다.EXPLAIN ANALYZESELECT c.customer_name, SUM(oi.quantity * oi.price) AS total_amountFROM customers cJOIN orders o ON c.customer_id = o.customer_idJOIN order_items oi ON o.order_id = oi.order_idWHERE o.order_date BETWEEN '2024-01-01' AND '2024-01-31'GROUP BY c.customer_nameHAVING SUM(oi.quantity * oi.price) >= 100; GroupAggregate ..

DB/PostgreSQL 2024.10.01

GPDB - motion 정의

motion데이터베이스의 여러 세그먼트 간에 데이터를 이동시키는 작업을 나타낸다. motion 종류Broadcast motion테이블의 데이터를 모든 세그먼트에 복사하는 작업이다.이 방식은 일반적으로 작은 테이블과 큰 테이블을 조인할 때 사용된다. 작은 테이블의 모든 데이터를 모든 세그먼트로 보내서 큰 테이블의 각 세그먼트에서 조인을 수행할 수 있도록 한다.주로 데이터 크기가 작고 모든 세그먼트에서 데이터를 필요로 할 때 효율적이다.Redistribute motion데이터를 지정된 분산 키에 따라 세그먼트 간에 재분배하는 작업이다.주로 조인 키가 두 테이블의 분산 키와 일치하지 않을 때 발생한다. 데이터를 조인 키 기준으로 재분배하여 동일한 세그먼트에 조인할 데이터를 모으는 역할을 한다.이 작업은 많은 ..

DB/PostgreSQL 2024.09.12

GPDB 분산키 Randomly vs 특정 컬럼

분산 키를 randomly 로 설정했을 때 (랜덤 분산) 특징: 데이터를 랜덤하게 분산시키는 방식이다.특정 열을 기준으로 분산하지 않으므로, 모든 세그먼트에 데이터가 고르게 분산될 가능성이 높다.해시 분산보다 더 균등한 데이터 분산을 기대할 수 있다.적용 상황:데이터 균등 분산: 데이터의 값이 불균등하거나, 특정 컬럼에 편중된 값이 있는 경우 randomly 분산은 세그먼트 간에 데이터와 부하를 고르게 나누는 데 유리하다.쿼리 패턴이 랜덤한 경우: 쿼리가 특정 컬럼을 자주 필터링하지 않거나, 특정 컬럼을 기준으로 조인이 자주 일어나지 않는 경우에 적합하다.분산 키를 지정하기 어려운 경우: 테이블에 명확하게 분산의 기준이 되는 컬럼이 없거나, 데이터의 자연스러운 분포를 예측하기 어려운 경우에 유용하다.쓰기..

DB/PostgreSQL 2024.09.12

PostgreSQL 로그인 권한 - 연결 실패

처음에 DB 연결 시 커넥션 실패 Logrole "siwon" is not permitted to log in 관리자 계정으로 접속 후 rolcanlogin 확인 SELECT rolname, rolcanlogin FROM pg_roles WHERE rolname = 'siwon'; rolcanlogin = false 값으로 나온다.PostgreSQL 에서 계정을 생성할 때, 역할이 있어도 로그인 권한이 없는 경우이다. 슈퍼유저로 접속 후 로그인 권한을 부여한다.ALTER ROLE siwon LOGIN; 다시 DB 연결하면 성공

DB/PostgreSQL 2024.08.31

쿼리 튜닝용 파라미터

- gp_workfile_compress_algorithm=none # default 값은 none이며, zlib 일경우에는 pgsql_tmp 사용시 압축모드로 사용하기 때문에 동시 사용자수가 높을 경우에 적용할 필요가 있음.- statement_mem # default 값은 125MB이며, 2GB까지 설정가능하나, 안정적인 측면에서 1900MB까지 적용 가능 => 대용량 쿼리일 경우 1900MB까지 높이는 것이 성능 향상 => OLTP성과 같이 short 쿼리일 경우 32MB으로 낮추는 것이 성능 향상- random_page_costdefault 값은 1000이며, 인덱스를 사용하기 위해서는 0, 1으로 셋팅하여, Index Scan을 유도- enable_nestloopdefault 값은 off 이며,..

DB/PostgreSQL 2024.08.24