아무로레이 님의 글 34
PostgreSQL 18 비동기 I/O 켜기
PostgreSQL 운영 글을 쓰다 보면 디스크 읽기가 느린 환경에서 순차 스캔과 VACUUM이 CPU는 놀면서 I/O 대기만 쌓이는 경우를 자주 만난다. PostgreSQL 18이 정식으로 나오면…
PostgreSQL 17 네이티브 증분 백업
매일 밤 pg_basebackup 으로 전체 클러스터를 통째로 복사하던 운영 서버가 있었다. 데이터가 수백 GB로 불어나니 백업 한 번에 디스크와 네트워크가 꽤 오래 묶였다. 그동안은 WAL 아카이…
PostgreSQL 대용량 테이블 RANGE 파티셔닝
로그성 테이블 하나가 수억 건으로 불어나면 조회도 느려지지만 더 성가신 건 정리다. 지난 90일만 남기고 싶은데 한 테이블에 다 들어 있으니 DELETE ... WHERE created_at ...…
상위 비용 SQL을 구간별로 비교해 튜닝하기
느린 쿼리를 잡아 달라는 요청을 받으면 가장 먼저 열어 보는 뷰가 pg_stat_statements 다. 슬로우 쿼리 로그는 임계값을 넘긴 개별 실행만 남기지만, 현장에서 서버를 실제로 무겁게 만드…
PostgreSQL 쿼리가 락에 걸려 멈출 때
RDS PostgreSQL을 운영하다 보면 평소 수십 밀리초에 끝나던 UPDATE가 갑자기 몇 분씩 응답이 없는 상황을 만난다. CPU도 멀쩡하고 디스크 I/O도 한가한데 특정 테이블을 건드리는 쿼…
Patroni와 etcd로 PostgreSQL 자동 승격
RDS를 쓰면 Multi-AZ 토글 하나로 장애 조치가 끝난다. 그런데 EC2에 PostgreSQL을 직접 올려 쓰는 환경이라면 그 자동 승격을 손으로 만들어야 한다. 예전에 keepalived와 …
논리적 복제로 PostgreSQL 최소 중단 업그레이드
메이저 버전 업그레이드는 미루기 쉬운 일이다. RDS의 in-place 업그레이드는 버튼 한 번으로 끝나는 대신 그 시간만큼 DB가 멈춰 있고, 데이터가 크면 중단이 수십 분으로 늘어난다. 서비스를…
락 없이 PostgreSQL 인덱스 추가하기
운영 중인 테이블에 인덱스 하나 추가하려다 서비스가 멈춘 경험이 한 번쯤 있을 것이다. 가입자가 늘면서 느려진 쿼리를 잡으려고 인덱스를 거는데, 그냥 CREATE INDEX 를 때리면 테이블 쓰기가…
External Secrets Operator로 AWS 비밀 동기화
EKS 클러스터를 운영하다 보면 DB 비밀번호나 API 키를 어디에 둘지가 늘 문제로 남는다. AWS Secrets Manager에는 이미 값이 있는데, 파드는 쿠버네티스 Secret 을 읽는다. …
pg_stat_statements로 느린 쿼리 Top N 뽑기
운영 중인 서비스가 느려질 때 어디서부터 봐야 할지 막막한 경우가 많다. 특정 화면 하나가 아니라 서버 전체가 무겁게 느껴지면 슬로우 쿼리 로그만으로는 그림이 안 잡힌다. 나는 이럴 때 개별 쿼리 …
반다이 마스코트 로보 하로 시리즈, 말하는 1/4 하로
건담 굿즈 중에서 하로만큼 일찍 상품이 됐어야 할 물건도 드문데, 정작 하로 자체를 세워 파는 완구가 나온 것은 TV판 방영으로부터 20년도 더 지난 2002년이었다. 마스코트 로보 하로(マスコット…
Flyway로 Spring Boot 스키마 버전 관리
운영 DB 스키마를 누가 언제 어떻게 바꿨는지 추적이 안 돼서 곤란했던 경험은 대부분 있을 것이다. 개발 DB에서는 되던 쿼리가 운영에서 컬럼이 없다고 터지고, ALTER 문은 누군가의 로컬 메모나…