yozm.tech
피드로 돌아가기
Hacker News (Top)HOTAI 재작성

PgBouncer 성능 4배 향상 비결: 멀티 프로세스 활용

클릭하우스(ClickHouse)가 관리형 포스트그레스(Postgres) 서비스에서 PgBouncer의 처리량을 4배 높이는 기술을 공개했습니다. 단일 스레드(single-threaded)인 PgBouncer의 한계를 극복하기 위해 여러 PgBouncer 프로세스를 활용하고, 커널의 로드 밸런싱과 프로세스 간 피어링(peering)을 통해 연결 취소 문제를 해결했습니다. 이로써 PgBouncer가 더 이상 병목 현상을 일으키지 않고 Postgres의 성능을 최대한 활용할 수 있게 되었습니다.

3일 전·2026.07.11·읽기 3·saisrirampur

클릭하우스(ClickHouse)가 자사의 관리형 포스트그레스(Postgres) 서비스에서 데이터베이스 연결 풀러(connection pooler)인 PgBouncer의 처리량(throughput)을 최대 4배까지 향상시키는 방법을 공개했습니다. PgBouncer는 단일 스레드(single-threaded) 애플리케이션으로, 아무리 많은 CPU 코어를 가진 서버에서도 단 하나의 코어만 사용하여 연결 풀링(connection pooling)을 처리하는 한계가 있었습니다. 이로 인해 Postgres 서버의 성능이 충분함에도 불구하고 PgBouncer가 병목 현상을 일으켜 전체 시스템의 처리량을 제한하는 문제가 발생했습니다.

클릭하우스는 이 문제를 해결하기 위해 여러 개의 PgBouncer 프로세스를 실행하는 방식을 채택했습니다. 서버의 가용 코어(vCPU) 수에 비례하여 PgBouncer 프로세스들을 띄우고, 모든 프로세스가 `so_reuseport` 옵션을 사용하여 동일한 포트(port)에 바인딩(bind)하도록 설정했습니다. 이렇게 하면 리눅스 커널(kernel)이 들어오는 클라이언트 연결을 여러 PgBouncer 프로세스에 자동으로 분산시켜 로드 밸런싱(load-balancing)을 수행합니다. 클라이언트 입장에서는 여전히 단일 엔드포인트(endpoint)에 연결하는 것처럼 보이며, 뒤에서 여러 PgBouncer가 동작하는 것을 알 수 없습니다. 하지만 `so_reuseport` 방식의 한 가지 문제점은 쿼리 취소(query cancellation) 요청이 잘못된 PgBouncer 프로세스로 전달될 수 있다는 점입니다. 이를 해결하기 위해 클릭하우스는 PgBouncer 프로세스들 간에 피어링(peering) 기능을 구현하여, 취소 요청이 잘못된 프로세스에 도착하더라도 실제 세션(session)을 담당하는 프로세스로 전달되도록 했습니다. 또한, `max_client_conn` 및 `max_db_connections`와 같은 연결 예산(connection budget)도 전체 프로세스 수에 따라 분할하여, 전체 PgBouncer 플릿(fleet)이 Postgres에 과부하를 주지 않으면서도 더 많은 동시 연결을 처리할 수 있도록 했습니다.

실제 하드웨어 테스트 결과, 16개의 가상 CPU(vCPU)를 가진 AWS EC2 인스턴스에서 단일 PgBouncer 프로세스는 최대 약 8만 7천 TPS(초당 트랜잭션 수)를 기록한 반면, 16개의 PgBouncer 프로세스로 구성된 플릿은 약 33만 6천 TPS까지 성능이 향상되어 약 4배의 처리량 증가를 보였습니다. 단일 프로세스 구성에서는 PgBouncer가 하나의 코어에 97% 이상 고정되어 병목 현상을 일으켰지만, 플릿 구성에서는 여러 코어에 작업이 분산되어 전체 CPU 활용률이 52%에 달하면서도 여전히 Postgres와 로드 생성기가 한계에 도달하기 전까지 여유가 있었습니다. 이처럼 클릭하우스의 접근 방식은 PgBouncer가 더 이상 시스템의 병목이 아닌 단순한 연결 파이프라인(plumbing) 역할을 하도록 만들어, Postgres 기반 애플리케이션의 확장성을 크게 개선했습니다. 모든 클릭하우스 관리형 포스트그레스 서버에는 이 설정이 기본으로 적용되어 제공됩니다.

1인 창업자를 위한 기회 분석
AI 분석 · 참고용이며 검증이 필요합니다
4/10
보통
4점인가

기존 기술의 최적화 사례이며, 핵심 아이디어가 공개되어 있어 직접적인 사업 기회보다는 기술 컨설팅이나 특정 니치 시장에 대한 관리형 서비스 형태로 접근 가능합니다.

문제 / 미충족 수요

PgBouncer는 단일 스레드(single-threaded)로 동작하여 고성능 Postgres 환경에서 병목 현상을 일으킬 수 있습니다.

한국 시장
국내 있음한국에서도 고성능 데이터베이스를 요구하는 서비스가 많아 PgBouncer 최적화 수요가 존재하지만, 대부분 자체 개발 또는 클라우드 제공사의 관리형 서비스를 이용하는 경우가 많습니다.
수익 모델

B2B SaaS 구독, 컨설팅 · 돈 내는 주체: 고성능 Postgres 데이터베이스를 운영하며 PgBouncer로 인한 병목 현상을 겪는 기업의 DevOps 팀 또는 엔지니어링 리더

1인 실현 가능성
3/5

핵심 기술은 공개되어 있으나, 안정적인 운영 및 피어링(peering) 구현에 대한 전문성이 필요하며, 클라우드 환경에 대한 이해도 요구됨.

진입 지점 (Wedge)

특정 산업군(예: 게임, 핀테크)의 고성능 Postgres 환경에서 PgBouncer 최적화 및 관리형 서비스 제공

이번 주 첫 실험

PgBouncer 멀티 프로세스 구성 및 `so_reuseport` 활용 가이드를 작성하고, 쿼리 취소(query cancellation) 문제를 해결하는 오픈소스 라이브러리 또는 스크립트를 개발하여 공유하기.

Original source
이 글은 Hacker News (Top)의 기사를 yozm.tech가 한국어로 재작성한 버전입니다.
원문 보기