본문 바로가기

PostgreSQL

(29)
patroni - DCS Failsafe Mode leader lock update가 실패할 수 있는 caseNetwork partitioningDCS being downDCS down이 자주 발생하나?어떤 DCS를 사용하느냐에 따라 발생할 가능성은 다름.예를 들어, Patroni에만 사용되는 Etcd의 경우, 문제가 발생할 가능성은 거의 없음. K8s API(Etcd 지원)를 사용하는 경우에는 자주 이슈가될 수 있다.DCS Failsafe 도입 이유DCS가 죽었다고 무분별하게 failover가 되는 것을 막고자 도입함.즉, leader lock update가 DCS 이슈 때문이 failover 하지 않겠다는 뜻.설정 방법true로 설정하면 DCS 정보만 업데이트가 불가능하고 다른 노드들과 통신이 되는 상황일 때는 failover시키지 않겠다.patro..
patroni- standby cluster standby cluster란?patroni에서는 cascading replication 운영을 지원함.standby cluster를 이용해서 다른 datacentor(region)에 cascading replicaiton을 구성할 수 있음.특징standby leader는 cluster leader와 매우 비슷하게 동작하지만 remote node에서 복제된다.standby leader에서 복제되는 cascade replicas를 의미구성 참고: https://patroni.readthedocs.io/en/latest/ha_multi_dc.html#asynchronous-replication cascading replication이란?standby server에서 다른 standby server로 복제 구..
patroni 관련 간단 용어 정리 patronictl 조회patronictl --helpUsage: patronictl [OPTIONS] COMMAND [ARGS]... Command-line interface for interacting with Patroni.Options: -c, --config-file TEXT Configuration file -d, --dcs-url, --dcs TEXT The DCS connect url -k, --insecure Allow connections to SSL sites without certs --help Show this message and exit.Commands: dsn Generate a ds..
Serial Types 과 Identity Columns Serial Typessmallserial, serial, bigserial data type은 실제 data type은 아님.unique identifier column을 생성하기 위한 표기상의 편의 간단 예시CREATE TABLE tablename ( colname SERIAL);#### 위의 data type 선언은 아래의 구문을 수행한 것과 같음.#### 시퀀스를 table의 특정 column에서 소유되도록 표시되므로 column이나 table이 삭제되면 시퀀스도 같이 삭제됨.CREATE SEQUENCE tablename_colname_seq AS integer;CREATE TABLE tablename ( colname integer NOT NULL DEFAULT nextval('tab..
JIT(Just-in-Time Compilation) 사용 목적JIT은 쿼리 실행 중 일부 계산을 "컴파일"해서 CPU가 더 빠르게 처리할 수 있도록 하는 기술 원래는 SQL 쿼리를 실행할 때, PostgreSQL은 모든 계산을 인터프리터 방식으로 처리JIT을 사용하면 계산식(expressions)이나 반복문(loop), 함수 호출 등을 머신 코드로 컴파일해서 실행하게 됨.즉, 반복 계산이 많은 복잡한 쿼리일수록 JIT의 효과가 커짐.유용한 상황대량의 데이터를 처리하는 복잡한 SELECT, JOIN, 집계 함수 등복잡한 WHERE 조건식이나 함수 호출이 많은 쿼리반복적인 연산이 많은 ANALYTICS, OLAP 환경유용하지 않은 상황단순 쿼리 (예: SELECT * FROM small_table)결과가 몇 줄 안 나오는 쿼리JIT 오버헤드(컴파일 시간)가 ..
PREPARE statement 들어가기 전에..쿼리 프로세싱 참고https://lsmdd.tistory.com/122 22. PostgreSQL - query processingquery processing parserSQL 문을 읽을 수 있도록 parse tree를 생성함.parse tree를 만들 때 SQL 문법 오류(syntax check)를 확인sementic check는 analyzer에서 진행함.즉, syntax 오류가 없으면 DB 내 table이 없더라도 parserlsmdd.tistory.comPREPARE statement란?성능을 최적화하기 위해 사용하는 server-side objectWhen the PREPARE statement is executed, the specified statement is parsed..
24. PostgreSQL - Temporary Files Temporary files은 언제 사용하는가?work_mem의 크기를 넘어서면 temporary file을 사용 temp_buffers의 크기를 넘어서면 temporary file을 사용 work_mem이란?configuration parameter로sort or hash table과 같은 query operation이 진행될 때 사용할 수 있는 최대 memory 영역을 지정할 때 사용여러 세션에서 수행되는 query에서 동시에 work_mem의 최대치까지 할당받아 쓸 수 있으므로 총 사용된 메모리양은 work_mem값보다 커질 수 있음. sort 연산   ORDER BY, DISTINCT, MERGE JOINS hash table    HASH JOIN, HASH-BASED AGGREGATION, I..
23. PostgreSQL - planner의 cost 계산 PostgreSQL의 query 옵티마이저는 cost를 기반으로 plan을 세움.rule기반은 제공하지 않음. cost는 costsize.c에 정의된 function에 의해 계산되며executor에 의해 실행되는 모든 operation에 해당하는 cost function을 제공함. PostgreSQL의 3종류의 coststart-up : 첫 tuple을 fetch하기 전에 소모되는 cost      예를들어, table의 첫 tuple에 access하기 위해 index page를 읽는 비용run : 모든 tuple을 fetch하는 비용total : start-up cost + run costexplain select * from test; QUERY PLAN ..