ในระบบที่มีการใช้งานฐานข้อมูล 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
คุณสมบัติ | PgBouncer | HikariCP |
---|---|---|
ระดับการทำงาน | Database Level (Proxy) | Application Level (JDBC) |
ภาษาที่รองรับ | ทุกภาษา (ผ่าน TCP) | Java/JVM-based |
Use Case | ระบบที่มีหลาย Service ใช้ Database ร่วมกัน | Application เฉพาะที่ต้องการ Performance |
Pooling Mode | Session / Transaction / Statement | Session |
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