fleetanalytics_mcp/pgbouncer/pgbouncer.ini

65 lines
3.5 KiB
INI
Raw Normal View History

; pgbouncer.ini — transaction-pooling front for timescale_db (tracksolid_db).
; ─────────────────────────────────────────────────────────────────────────────
; Purpose: the DB runs at max_connections=100 and ~9 stack services each hold a
; persistent pool (several as the postgres superuser, idle for hours), so peaks hit
; "too many connections". PgBouncer multiplexes MANY client connections onto a SMALL
; set of real backend connections, so the DB connection count stays bounded no matter
; how many app pools exist.
;
; Auth uses auth_query (NOT a hand-maintained userlist of every app): PgBouncer logs
; in as `pgbouncer_auth` and looks each user's verifier up via pgbouncer.user_lookup()
; — see auth_setup.sql. Only the pgbouncer_auth verifier lives in userlist.txt.
[databases]
; Apps point their DSN host at pgbouncer:6432 with the SAME dbname/user/password.
; `host` here is the real DB (the timescale_db container hostname on the DB network).
tracksolid_db = host=timescale_db port=5432 dbname=tracksolid_db
[pgbouncer]
listen_addr = 0.0.0.0
listen_port = 6432
; ── Auth (pass-through via auth_query) ──────────────────────────────────────
auth_type = scram-sha-256
auth_file = /etc/pgbouncer/userlist.txt
auth_user = pgbouncer_auth
auth_query = SELECT uname, phash FROM pgbouncer.user_lookup($1)
; ── Pooling ─────────────────────────────────────────────────────────────────
; transaction mode = a server connection is returned to the pool at COMMIT/ROLLBACK,
; so a handful of backends serve hundreds of clients. See README for the feature
; caveats (no session-level prepared statements / SET that persists across txns).
pool_mode = transaction
; Total backend connections PgBouncer will ever open to the DB =
; (number of [databases] entries) × default_pool_size + reserve_pool_size.
; Keep the SUM across all poolers well under the DB's max_connections (100).
; With one database and 20 + 5 reserve = 25 backends max — leaving headroom for
; superuser/admin/background-worker connections that bypass PgBouncer.
default_pool_size = 20
min_pool_size = 0
reserve_pool_size = 5
reserve_pool_timeout = 3
; Clients can be plentiful (cheap) — only backends are scarce.
max_client_conn = 2000
; Recycle idle/old server connections so none linger for hours.
server_idle_timeout = 300
server_lifetime = 3600
; ── Robustness ──────────────────────────────────────────────────────────────
; Apps set per-connection GUCs via the `options` startup param (e.g. the analytics
; MCP sends `-c default_transaction_read_only=on -c statement_timeout=...`). In
; transaction pooling those can't be honored per-shared-backend, so ignore them and
; rely on ROLE-level settings (ALTER ROLE ... SET ...) instead. See README.
ignore_startup_parameters = extra_float_digits,options,search_path
; Admin/stats console (psql -p 6432 pgbouncer) — restricted to the auth role.
admin_users = pgbouncer_auth
stats_users = pgbouncer_auth
; Quiet by default; flip to 1 temporarily when debugging.
log_connections = 0
log_disconnections = 0