การตั้งค่า Connection Pooling (PgBouncer, HikariCP)

Sharing is caring!

ในระบบที่มีการใช้งานฐานข้อมูล PostgreSQL จำนวนมาก การสร้าง Connection ใหม่ทุกครั้งจะทำให้สิ้นเปลือง Resource และเกิด Latency การใช้ Connection Pooling ช่วยเพิ่มประสิทธิภาพ โดยเก็บ Connection ที่เปิดไว้แล้วมา Reuse ทำให้ระบบรองรับผู้ใช้พร้อมกันได้มากขึ้น เครื่องมือยอดนิยมคือ PgBouncer (ระดับ Database) และ HikariCP (ระดับ Application)

Connection Pooling คืออะไร?

การใช้ Connection Pooling คือการสร้างชุด Connection ไปยัง Database ล่วงหน้า แล้วนำมา Reuse แทนการสร้างใหม่ทุกครั้ง → ลด Overhead และเพิ่ม Throughput ของระบบ

1. PgBouncer

PgBouncer เป็น Connection Pooler ที่ทำงานแยกจาก Database Server ทำหน้าที่เป็น Proxy ระหว่าง Application และ PostgreSQL รองรับ Pooling Mode หลายแบบ เช่น Session, Transaction, Statement

การติดตั้ง PgBouncer

sudo apt-get install pgbouncer
pgbouncer -V
  

การตั้งค่า pgBouncer.ini

[databases]
mydb = host=127.0.0.1 
dbname=mydb 
user=postgres 
password=secret

[pgbouncer]
listen_addr = 0.0.0.0 
listen_port = 6432 
auth_type = md5 
auth_file = /etc/pgbouncer/userlist.txt 
pool_mode = transaction 
max_client_conn = 200 
default_pool_size = 50

2. HikariCP

HikariCP เป็น Connection Pool ยอดนิยมฝั่ง Application โดยเฉพาะกับ Java/Spring Boot มีจุดเด่นคือ เร็ว, เบา, และเสถียร

การตั้งค่า HikariCP (Spring Boot)

spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/mydb
    username: postgres
    password: secret
    hikari:
      maximum-pool-size: 20
      minimum-idle: 5
      idle-timeout: 30000
      connection-timeout: 20000
      max-lifetime: 1800000
  

3. การเปรียบเทียบ PgBouncer vs HikariCP

คุณสมบัติPgBouncerHikariCP
ระดับการทำงานDatabase Level (Proxy)Application Level (JDBC)
ภาษาที่รองรับทุกภาษา (ผ่าน TCP)Java/JVM-based
Use Caseระบบที่มีหลาย Service ใช้ Database ร่วมกันApplication เฉพาะที่ต้องการ Performance
Pooling ModeSession / Transaction / StatementSession

4. Best Practices

  • ใช้ PgBouncer สำหรับระบบ Microservices ที่มีหลาย Client
  • ใช้ HikariCP ใน Spring Boot หรือ Java Application
  • ตั้งค่า Pool Size ตามจำนวน CPU/Core และ Workload
  • ตรวจสอบ Metrics ของ Pool (Active, Idle, Waiting)
  • ใช้ Monitoring เช่น pg_stat_activity, Grafana Dashboard

5. การ Monitor Connection Pool

-- ดูจำนวน Connection ที่เปิดอยู่
SELECT datname, numbackends, xact_commit, xact_rollback
FROM pg_stat_database;

-- ดู Connection ที่กำลังใช้งาน
SELECT * FROM pg_stat_activity WHERE state != 'idle';
  

สรุป

การตั้งค่า Connection Pooling เป็นสิ่งจำเป็นสำหรับระบบที่มี Traffic สูง PgBouncer เหมาะกับการทำงานระดับ Database Proxy ในขณะที่ HikariCP เหมาะกับ Application ฝั่ง Java/Spring Boot หากนำทั้งสองมาใช้อย่างเหมาะสม จะช่วยให้ระบบรองรับโหลดได้มากขึ้น มี Latency ต่ำ และเสถียรในระยะยาว

SEO Keywords

PostgreSQL Connection Pooling,PgBouncer PostgreSQL,HikariCP Spring Boot,Postgres Performance Tuning,Connection Pool Database,Monitor PgBouncer HikariCP,Postgres Scaling

Leave a Reply

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *