postgresSQL - pgBouncer

postgresSQL - pgBouncer

backend connection

  • call fork()
  • create address space
  • create file descripter
  • copy memory segment
  • 위 작업이 계속 매초마다 일어난다면?

connection pool

  • application과 DB와의 connection을 맺을 때는 많은 communication이 발생
  • connection pool이 적용된다면, login하는 절차 X
  • 이미 connection을 connection pooler가 가지고 있기 때문
  • DB로 들어가는 traffic도 제어 가능

pgBouncer process

Client Side : CL_LOGIN, CL_WAITING_LOGIN, CL_ACTIVE, CL_WAITING

Server Side : SV_ACTIVE, SV_IDLE, SV_USED, SV_LOGIN, SV_TEST
  • Client Side는 client로 부터 받는 요청들이 쌓이는 곳
  • Client가 login을 요청했을 때, Query를 실행하려고 했을 때 모두 Client Side와 관련
  • DB와 직접적으로 connection을 맺는곳은 X, 일종의 대기열

CL_LOGIN : Client가 login 시도하는 상태

CL_WAITING_LOGIN : Client가 Login하기위해 대기하는 상태

CL_ACTIVE : Client가 Server Side와 맵핑되어 있는 상태

CL_WAITING : Client가 Server Side와 맵핑하기 위해 대기하는 상태

  • Server Side는 client의 요청을 받아 DB에 접속하는 파트
  • DB의 active session들이 실제로 PgBouncer의 Server Side status와 동일

SV_ACTIVE : DB의 active session과 동일

SV_IDLE : SV_ACTIVE로 사용하다가 query가 끝나고 남아 있는 상태. 일종의 Pool. DB에서도 idle로 connection 유지.

SV_USED : SV_IDLE이 일정 시간(server_check_delay) 이후 미사용되면서 Pool로 전환된 상태. DB에서도 idle로 connection 유지.

SV_TEST : SV_USED가 일정 시간동안 사용되지 않았던 connection이기 때문에 client에게 할당하기전 test query를 실행하는 상태. 일반적으로 select 1; 을 실행.

SV_LOGIN : Server Side에서 DB로 login을 시도하는 상태.

pool config

default pool : PgBouncer의 database에서 pool을 별도로 설정하지 않았을 때, 적용받는 pool size. 일종의 global variable.

database pool : 목적에 따라 분리해서 생성하는 pool로, database별로 pool size를 조절할 수 있음. 여기서 설정하면 default pool size에 영향을 받지 않음.

min_pool_size : 앞서 말한 SV_IDLE + SV_USED 값으로, default pool size와 database pool size 안에서 pool을 확보하는 size.

  • min_pool_size를 반드시 설정해야 pool을 사용함. 걍 default_pool, database_pool은 최대 커넥션 수일 뿐, min_pool_size가 진짜 커넥션풀을 관장하는 SV_IDLE, SV_USED 의 총합이므로 주의.
 Date: February 5, 2023
 Tags:  DB

Previous:
⏪ Rust에서 trait은 무엇인가?

Next:
postgresSQL - streaming/logical replication ⏩