CoinGecko’s engineering team successfully optimized a 1TB+ PostgreSQL table storing hourly crypto price data by implementing table partitioning. The initiative delivered dramatic performance improvements: 86% reduction in p99 response time (from 4.13s to 578ms) and 20% IOPS reduction.
Posts for: #Postgresql
Rails Connection Pool vs Pgbouncer
Rails by default comes with connection pooler on the application side but I always wonder what is the difference if we use another connection pooler such as PgBouncer. So, here is some notes on trying to understand some of it.
To try this out, I’m using docker so that I don’t have to install extra application:
$ mkdir conn-poc; cd conn-poc
$ rails new blog --api -T --database=postgresql
$ mkdir bouncer
$ mkdir db
# create docker network so that PgBouncer and PostgreSQL can communicate with eacher other
$ docker network create conn-poc-1-net
# start postgresql
$ cd db
$ docker run --rm \
--net conn-poc-1-net \
--name conn-poc-1-pg \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=postgres \
-e POSTGRES_DB=blog_development \
-v $(pwd):/var/lib/postgresql/data \
-p 6432:5432 \
-it postgres:13.8-alpine
# start pgbouncer
$ cd bouncer
$ docker run --rm \
--net conn-poc-1-net \
--name conn-poc-1-bouncer \
-e DATABASE_URL="postgres://postgres:postgres@conn-poc-1-pg/blog_development" \
-v $(pwd):/etc/pgbouncer \
-p 7432:5432 \
edoburu/pgbouncer
PgBouncer config: