1. 개요모 고객사에서 '차세대 인프라 프로젝트'를 진행하며 있었던 Query 튜닝 케이스를 다루어보고자 합니다. * 당시 상황[AS-IS] 운영에서 [TO-BE] 개발DB로 테스트 이관 후 서비스를 검증하던 중, 회원가입 단계에서 문제가 발생했습니다.(이용약관 / 개인정보제공 동의 항목을 불러오는데 무려 8초나 소요) 2. 실행계획 비교[AS-IS]에서는 해당 Entity가 Bitmap Index Scan으로 풀리는 Plan을 가집니다.Cost 10만, Elapsed time 1초 미만의 Query였습니다. [TO-BE] 환경에서 실행계획을 추출한 다음, 분석해보았습니다.Cost 8만, Elapsed time 8.0초 의 Query가 되었습니다. Cost 측면에서 살펴보자면, 기존 운영에 비해 더 낮은..
1. 개요해당 포스팅에서는 PG_HINT_PLAN의 설치 과정에 대해 다루어보고자 합니다. 타 DBMS (이 포스팅에서는 ORACLE로 가정)에 익숙하신 분들은 실행계획 분석 하에 Query를 적절히 튜닝하는 경우가 있었을 것입니다. PostgreSQL 에서도 PG_HINT_PLAN을 설치하여 실행계획을 제어할 수 있습니다. ** 들어가기에 앞서,-> ORACLE 에서는 hint를 이용하여 실행계획을 제어할 수 있습니다.(간혹 비효율적이라면 hint가 무시되는 케이스도 존재합니다.) 하지만 PostgreSQL의 PG_HINT_PLAN은 Plan Tree 자체를 변경합니다.따라서, PostgreSQL은 PG_HINT_PLAN의 내용을 무시할 수 없습니다.즉 ORACLE의 Optimizer와는 달리, 유..
1. 개요앞의 포스팅에서 PG_AUTO_FAILOVER 모니터 및 노드 구성, connection 등을 테스트 했습니다.해당 포스팅에서는 Primary node에 인위적인 장애를 가했을 때, failover가 정상적으로 진행되는지 확인하고자 합니다. 2. Failover TEST1) Node 상태 확인/postgres> pg_autoctl show state Name | Node | Host:Port | TLI: LSN | Connection | Reported State | Assigned State--------+-------+---------------------+----------------+--------------+-------------..
5. Standby node 구성1) 기존 pgdata 디렉토리 삭제[postgres@localhost pgsql]$ mv data data_oldStandby Node 에서 PostgreSQL initdb 수행 후, pgautofailover extension 을 설치 한 이력이 있습니다. 상기의 과정은 pgautofailover extension 이 정상적으로 설치되는지 확인하기 위함입니다. pgdata 의 데이터는 Monitor 와 Connection 하는 과정에서 pg_basebackup 을 통해 모두 넘어오게 됩니다. [추가] pgdata 외에 tablespace 관련 데이터가 있다면 모두 삭제 하셔야 합니다. 2) Monitor node와 연결(1) 옵션- pg_autoctl create po..
4. Primary node 구성1) Monitor node와 연결(1) 옵션- pg_autoctl create postgres --help 로 옵션 조회할 수 있습니다. --pg_ctl : pg_ctl 경로 (보통 $PGHOME/bin 아래에 위치) --pghost : PostgreSQL 의 hostname --pgdata : pgdata 경로 (보통 $PGHOME/data) --pgport : PostgreSQL DB 에 사용할 포트 (Default 5432) --listen : PostgreSQL 의 listen address --username : PostgreSQL 의 유저명 --dbname : PostgreSQL 의 데이터베이스명 --name : pg_auto_failover 에서 사용 할 노..
3. Monitor node 구성1) Monitor 생성(1) Monitor 생성 옵션- pg_autoctl create monitor --help 로 옵션 조회할 수 있습니다.--pg_ctl : pg_ctl 경로 (보통 $PGHOME/bin 아래에 위치) --pgdata : pgdata 경로 (보통 $PGHOME/data) --pgport : PostgreSQL DB 에 사용할 포트 (Default 5432) --hostname : 사용할 hostname Hostname 을 명시하지 않으면 아래의 알고리즘을 통해 host 를 가져옵니다. - 8.8.8.8:53 커넥션 시도하여 public ip 획득 후 TCP/IP 클라이언트 주소 확인 - Reverse DNS lookup 하여 로..
1. Install Environment1) Monitor node(1) OS Version : Rocky Linux 8.8 (2) RAM : 4096MB (4GB) (3) IP Address : xxx.xxx.xxx.119 (4) Port : 5432(5) PG Version : 15.22) Primary node(1) OS Version : Rocky Linux 8.8 (2) RAM : 4096MB (4GB) (3) IP Address : xxx.xxx.xxx.117 (4) Port : 5432 (5) PG Version : 15.23) Standby node(1) OS Version : Rocky Linux 8.8 (2) RAM : 4096MB (4GB) (3) IP Address : xxx.xxx..
0. 개요1) PG_AUTO_FAILOVER 소개PG_AUTO_FAILOVER 은 citusdata 가 제공하는 PostgreSQL 용 HA Extension 입니다. PostgreSQL 노드를 Streaming Replication 방식으로 다중화 하고, 장애 발생 시 자동으로 페일오버 되도록 하는 기능을 제공합니다. 해당 Extension 은 네이버클라우드 Cloud DB for PostgreSQL 서비스에도 채택됐을 정도로 안정적인 편이라 볼 수 있습니다. 2) PG_AUTO_FAILOVER 구조일련의 메커니즘을 구현하기 위해 최소 3개의 노드가 필요합니다.* Monitor - 각 Node의 keeper process를 이용하여 모니터링 및 제어* Primary - PostgreSQL 엔진 + k..
1. Install Environment1) Master Node* OS : CentOS 7.9* Engine : PostgreSQL 15.1* port : 5432 (Default)2) Slave Node* OS : CentOS 7.9* Engine : PostgreSQL 15.1* port : 5432 (Default) 2. Config Procedure1) Master Node(1) Replication 유저 생성postgres=# create role repl with replication password 'repl' login;CREATE ROLEpostgres=# \du List of rolesRole name | ..
1. Install Environment* OS : CentOS 7.9* Engine : PostgreSQL 15.1 2. Install Procedure1) OS Parameter Modify(1) limits.conf 수정[root@localhost /]$ vi /etc/security/limits.conf-- 아래의 내용을 추가합니다.# PostgreSQL Install postgres soft nofile 65535 postgres hard nofile 65535- 해당 OS 파라미터를 수정하지 않고 그냥 운영 시, Getting too many open files error for Postgres 오류가 발생할 수 있습니다. - 이를 방지하기 위해 limits 값을 설정합니다. - 단순 Inst..
1. 개요Requirements는 해당 Software가 정상적으로 설치되어 사용하기 위한 요구 사항들을 기술한 것입니다.여기에는 기본 HW의 Spec 뿐만 아니라 OS단의 파라미터 설정, Package 등이 포함될 수 있습니다. 기존 ORACLE RDBMS(또는 타 DBMS)을 경험하신 분이라면 Requirements가 다소 친근하게 느껴지실 수도 있겠습니다.하지만 PostgreSQL의 Requirements는 공식 docs가 있긴 하나, 읽기에 다소 난잡한 느낌이 들기도 합니다. 따라서, 이를 최대한 간략하게 (A4용지 1~2페이지 분량) 살펴볼 수 있도록 정리했습니다. * 해당 내용은 Yum repo를 통해 설치하시는 분은 넘겨도 되는 부분입니다.Source code로 PostgreSQL을 B..