DB/PostgreSQL 3

PostgreSQL 디스크 쓰기 지연 관련 설정

PostgreSQL에서는 WAL의 쓰기 동작을 조정하는 몇 가지 매개변수를 통해 유사한 효과를 낼 수 있다.이 값들을 통해 쓰기 성능을 개선할 수 있다. 단 이러한 설정 시, 재해 등으로 인해 데이터 손실 가능성이 생기게 된다. 다음은 관련 설정들이다:1. wal_writer_delayWAL Writer 프로세스가 디스크로 WAL을 기록하기 전에 대기하는 시간(밀리초)을 설정기본값: 200ms더 큰 값을 설정하면 쓰기 빈도가 줄어들어 디스크 I/O 부하를 줄일 수 있다.설정:SET wal_writer_delay = '500ms';2. wal_writer_flush_afterWAL Writer가 데이터를 디스크로 flush하기 전에 누적할 수 있는 최대 데이터 양(바이트)을 지정기본값: 1MB더 큰 값을 ..

DB/PostgreSQL 2025.01.05

PostgreSQL Connection이 90분만에 끊어지는 상황 해결하기

네트워크 라우터의 TCP 연결 타임아웃과 Postgres keep-alive 설정에 대한 흥미로운 사례를 공유하고자 한다.부제는 "Cisco와 Windows의 조합으로 만들어진 혼돈" 정도로 하고자 한다. 문제 상황Windows 환경에서 Postgres 클라이언트와 DB 서버를 사용하던 중, 90분이 지나면 연결이 끊어지는 현상이 발생했다. 이 문제를 해결하기 위해 Cisco 공식 문서를 찾아보면서 원인을 파악할 수 있었다.라우터의 연결 상태 관리 방식라우터는 로컬 상태 테이블에서 연결들을 추적하며, 이를 통해 라우팅 결정을 내리고 유효하지 않은 패킷을 필터링한다. 이 상태 정보는 다음과 같은 경우에 제거된다:양쪽 중 한 쪽이 연결을 종료할 때연결이 너무 오랫동안 유휴 상태일 때 (클라이언트와 서버가 모..

DB/PostgreSQL 2024.11.29

PostgreSQL Vacuum 관련 쿼리 간단 모음

PostgreSQL를 사용하는 프로젝트에서 DevOps 업무를 맡았을 때 자주 사용했던 쿼리들을 간단히 정리해보았다. -- t_product 테이블의 Auto VACUUM 설정을 비활성화 ALTER TABLE public.t_product SET (autovacuum_enabled = false); -- 가장 오래된 20개의 테이블들의 목록 조회 SELECT c.oid::regclass AS table_name, greatest(age(c.relfrozenxid), age(t.relfrozenxid)) AS age, pg_size_pretty(pg_table_size(c.oid)) AS table_size FROM pg_class c LEFT JOIN pg_class t ON c.reltoastrelid..

DB/PostgreSQL 2024.02.07