PostgreSQL

26개

PostgreSQL 내부 구조 연재와 운영 기록

PostgreSQL · 운영 PostgreSQL 운영 12/12 PostgreSQL 운영 12: 데이터 손상이 의심된다invalid page 에러가 뜰 때, 손상 범위를 어떻게 파악하고 무엇을 먼저 살리는가 #Checksum#Amcheck#Invalid Page in Block PostgreSQL · 운영 PostgreSQL 운영 11/12 PostgreSQL 운영 11: 메모리가 모자란다쿼리 몇 개 때문에 모든 세션이 끊겼다면, 메모리를 누가 얼마나 쓰는지 보고 한도를 어떻게 잡는가 #메모리#Work_mem#Terminated by Signal 9 PostgreSQL · 운영 PostgreSQL 운영 10/12 PostgreSQL 운영 10: 주기적으로 I/O가 튄다몇 분마다 응답 시간이 튀고 디스크 쓰기가 몰린다면, 체크포인트를 어떻게 확인하고 무엇을 조정하는가 #체크포인트#WAL#Checkpoints Are Occurring Too Frequently PostgreSQL · 운영 PostgreSQL 운영 9/12 PostgreSQL 운영 9: 접속이 안 된다애플리케이션이 DB에 접속하지 못할 때, 에러 메시지로 원인을 가르고 들어갈 수 없는 상황에서도 되살리는 법 #커넥션#Pg_hba.conf#Too Many Clients Already PostgreSQL · 운영 PostgreSQL 운영 8/12 PostgreSQL 운영 8: standby가 뒤처진다standby의 데이터가 늦을 때 어디서 늦는지 나눠 보고, 쿼리 취소와 primary bloat 사이에서 무엇을 고르는가 #복제#Standby#Conflict With Recovery PostgreSQL · 운영 PostgreSQL 운영 7/12 PostgreSQL 운영 7: wraparound 경고가 떴다must be vacuumed within 경고가 보이거나 쓰기가 거부될 때, 무엇을 확인하고 어떤 순서로 되살리는가 #Wraparound#VACUUM#Must Be Vacuumed Within PostgreSQL · 운영 PostgreSQL 운영 6/12 PostgreSQL 운영 6: 디스크가 찬다데이터는 그대로인데 디스크가 찬다면 무엇이 차지하고 있고, 가득 차면 어떻게 되며, 어떻게 되살리는가 #디스크#WAL#No Space Left on Device PostgreSQL · 운영 PostgreSQL 운영 5/12 PostgreSQL 운영 5: 테이블과 인덱스가 계속 커진다행 수는 그대로인데 테이블과 인덱스가 커질 때, 얼마나 부풀었는지 재고 어떻게 줄이는가 #Bloat#Autovacuum#Automatic Vacuum of Table PostgreSQL · 운영 PostgreSQL 운영 4/12 PostgreSQL 운영 4: 긴 트랜잭션과 idle in transactionVACUUM이 돌아도 dead tuple이 줄지 않을 때, 무엇이 붙잡고 있는지 찾고 어떻게 막는가 #VACUUM#트랜잭션#Dead but Not Yet Removable PostgreSQL · 운영 PostgreSQL 운영 3/12 PostgreSQL 운영 3: 쿼리가 갑자기 느려졌다코드도 쿼리도 그대로인데 어제까지 빠르던 쿼리가 느려졌다면, 무엇이 바뀐 것인가 #실행 계획#통계#Statement Timeout PostgreSQL · 운영 PostgreSQL 운영 2/12 PostgreSQL 운영 2: 세션들이 멈춰 있다세션이 줄줄이 멈췄을 때 누가 막고 있는지 찾고, 어떻게 풀고, 어떻게 막는가 #락#Pg_locks#Deadlock Detected PostgreSQL · HA Patroni HA 3/3 Patroni HA 3: 운영할 때 주의할 점설정 변경, DCS 장애, failover 데이터 유실, split-brain, 방치된 slot을 재현해 본다 #Patroni#HA#동기 복제 PostgreSQL · HA Patroni HA 2/3 Patroni HA 2: 3노드 클러스터 구성하기Rocky Linux 9에 etcd 3대, Patroni 3대, HAProxy를 올리고 switchover와 failover를 해 본다 #Patroni#HA#Etcd PostgreSQL · 운영 PostgreSQL 운영 1/12 PostgreSQL 운영 1: 진단 도구상자장애가 났을 때 원인을 찾으려면 무엇을 미리 켜 두고, 어디부터 봐야 하는가 #모니터링#Pg_stat_statements#Still Waiting For PostgreSQL · HA Patroni HA 1/3 Patroni HA 1: Patroni의 구조와 동작 원리primary가 죽었을 때 누가, 무엇을 근거로 새 primary를 정하는가 #Patroni#HA#Etcd PostgreSQL · 인터널 PostgreSQL extension은 어떻게 동작하는가control 파일, SQL 스크립트, 공유 라이브러리가 CREATE EXTENSION과 dlopen을 거쳐 서버 프로세스 안에서 돌기까지 #Extension#CREATE EXTENSION#Shared_preload_libraries PostgreSQL · 인터널 PostgreSQL 인터널 10/10 PostgreSQL 인터널 10: 쿼리 처리 과정SQL 한 줄이 결과가 되기까지: 파서, 플래너, 실행기와 통계 정보 #쿼리#플래너#통계 PostgreSQL · 인터널 PostgreSQL 인터널 9/10 PostgreSQL 인터널 9: 스트리밍 복제와 Replication Slotstandby는 primary의 변경을 어떻게 따라가고, replication slot은 왜 디스크를 채우는가 #복제#Replication Slot#Standby PostgreSQL · 인터널 PostgreSQL 인터널 8/10 PostgreSQL 인터널 8: 체크포인트와 장애 복구 과정장애가 나도 커밋한 데이터가 사라지지 않는 이유, 그리고 복구는 어디서부터 시작하는가 #체크포인트#복구#PITR PostgreSQL · 인터널 PostgreSQL 인터널 7/10 PostgreSQL 인터널 7: WAL모든 변경은 왜 먼저 WAL에 적히고, WAL 레코드에는 무엇이 들어 있는가 #WAL#LSN#Full_page_writes PostgreSQL · 인터널 PostgreSQL 인터널 6/10 PostgreSQL 인터널 6: 트랜잭션 ID wraparound32비트 트랜잭션 ID가 한 바퀴 돌면 무슨 일이 생기고, PostgreSQL은 어떻게 막는가 #Wraparound#Freeze#VACUUM PostgreSQL · 인터널 PostgreSQL 인터널 5/10 PostgreSQL 인터널 5: VACUUM과 Autovacuumdead tuple은 누가 언제 어떻게 정리하는가 #VACUUM#Autovacuum#MVCC PostgreSQL · 인터널 PostgreSQL 인터널 4/10 PostgreSQL 인터널 4: MVCCPostgreSQL은 어떻게 읽기와 쓰기가 서로를 막지 않게 하는가 #MVCC#트랜잭션#스냅샷 PostgreSQL · 인터널 PostgreSQL 인터널 3/10 PostgreSQL 인터널 3: 데이터 저장 구조테이블의 행은 디스크에 어떤 모양으로 저장되는가 #페이지#튜플#TOAST PostgreSQL · 인터널 PostgreSQL 인터널 2/10 PostgreSQL 인터널 2: 메모리 구조shared buffers, work_mem, WAL buffers는 어디에 어떻게 쓰이는가 #메모리#Shared_buffers#Work_mem PostgreSQL · 인터널 PostgreSQL 인터널 1/10 PostgreSQL 인터널 1: 프로세스 구조postmaster와 backend, 백그라운드 프로세스가 각각 무슨 일을 하는지 #프로세스#아키텍처#Postmaster