Go로 PostgreSQL 프록시 만들기 (36) - Grafana Dashboard 템플릿
pgmux의 17개 Prometheus 메트릭을 한눈에 볼 수 있는 Grafana 대시보드 템플릿을 만들고, Helm Chart로 자동 배포하는 방법을 다룬다.
pgmux의 17개 Prometheus 메트릭을 한눈에 볼 수 있는 Grafana 대시보드 템플릿을 만들고, Helm Chart로 자동 배포하는 방법을 다룬다.
pgbench로 Direct DB, pgmux, PgBouncer를 3자 비교하고, hot path 최적화로 SELECT-only 46%→83%로 개선한다.
pprof CPU/alloc 프로파일링으로 병목을 찾고, atomic.Pointer·ReadMessageReuse·wire buffer 재사용을 적용한다. 그리고 응답 batching이 왜 '투명한 프록시'의 원칙을 깨는지 분석한다.
세션 상태 추적으로 불필요한 DISCARD ALL을 건너뛰고, RouteWithTxState로 lock 횟수를 줄이고, 벤치마크 방법론을 개선한다.
Transaction Pooling 환경에서 Prepared Statement를 사용할 수 없는 PgBouncer의 한계를 극복하기 위해, Parse/Bind 메시지를 인터셉트하여 Simple Query로 합성하는 Multiplexing 기능을 구현한다.
pgmux에서 발견된 두 가지 CRITICAL 버그, COPY 프로토콜 교착과 Audit Logger의 무한 Map 메모리 누수를 분석하고 수정한다.
pgmux에서 발견된 두 가지 CRITICAL 버그 — 에러 시 오염된 커넥션이 풀에 반납되는 Protocol Desync와, 단일 panic이 전체 서버를 크래시시키는 Global Panic Vulnerability — 를 분석하고 수정한다.
pgmux에서 발견된 두 가지 CRITICAL 버그 — HTTP 클라이언트 끊김을 무시해 고루틴과 DB 커넥션이 영원히 블로킹되는 좀비 누수와, 핫-리로드 후 Admin/Data API가 닫힌 풀을 바라보는 Dangling Pointer — 를 분석하고 수정한다.
2,259줄짜리 server.go를 역할별 9개 파일로 분리한 리팩토링 과정 — 왜 쪼개야 했는지, 어떤 기준으로 경계를 나눴는지, Go 패키지 내 파일 분리 전략을 정리한다.
QA에서 발견된 3가지 버그 — CancelRequest 무시, Graceful Shutdown 무한 대기, Balancer 데이터 레이스 — 의 원인 분석과 수정 과정을 정리한다.