ในการดูแลระบบฐานข้อมูล PostgreSQL สิ่งสำคัญคือต้องสามารถ Monitor การทำงานของฐานข้อมูลได้แบบ Real-time และวิเคราะห์ Performance ได้ในระยะยาว PostgreSQL มีทั้ง Views ที่ใช้ Monitor โดยตรง เช่น pg_stat_activity
, pg_stat_statements
และสามารถเชื่อมต่อกับเครื่องมือภายนอกอย่าง Prometheus และ Grafana เพื่อทำ Dashboard แบบ Visualization ได้
1. การใช้ pg_stat_activity
pg_stat_activity
ใช้ดู Query ที่กำลังทำงานใน PostgreSQL แบบ Real-time พร้อมทั้งบอกสถานะ Connection, User, Database และเวลาที่เริ่มรัน
SELECT pid, usename, datname, state, query, query_start FROM pg_stat_activity ORDER BY query_start DESC;
2. การใช้ pg_stat_statements
pg_stat_statements
เป็น Extension สำหรับดูสถิติ Query ทั้งหมด เช่น จำนวนครั้งที่รัน, เวลารวม, เวลามากที่สุด, และค่าเฉลี่ย เหมาะสำหรับหา Query ที่ทำงานช้า (Slow Query)
การติดตั้ง
CREATE EXTENSION pg_stat_statements;
การใช้งาน
SELECT query, calls, total_exec_time, mean_exec_time FROM pg_stat_statements ORDER BY total_exec_time DESC LIMIT 5;
3. Monitoring ด้วย Prometheus
Prometheus เป็นระบบ Time-series Database สำหรับเก็บ Metrics PostgreSQL สามารถส่ง Metrics ให้ Prometheus ผ่าน postgres_exporter
ติดตั้ง postgres_exporter
docker run -d \ -p 9187:9187 \ -e DATA_SOURCE_NAME="postgresql://postgres:password@localhost:5432/postgres?sslmode=disable" \ quay.io/prometheuscommunity/postgres-exporter
ตัวอย่าง Metrics ที่ได้
pg_stat_activity_count
pg_stat_database_xact_commit
pg_stat_database_tup_returned
4. Visualization ด้วย Grafana
Grafana ใช้แสดงผล Metrics ที่เก็บจาก Prometheus ทำให้ DBA เห็น Performance PostgreSQL ในรูปแบบ Dashboard
ตัวอย่าง Dashboard
- จำนวน Connection
- Transaction per Second (TPS)
- Slow Queries
- Replication Lag
5. Best Practices การ Monitor
- เปิดใช้งาน
pg_stat_statements
เสมอ เพื่อหา Slow Queries - ใช้ Prometheus เก็บ Metrics ย้อนหลัง
- ทำ Grafana Dashboard ให้ทีม Dev/DBA ใช้ง่าย
- ตั้ง Alert (เช่น Connection เกิน 80%, TPS ลดลง)
6. ตัวอย่าง Query Monitoring
-- Query หาว่าตอนนี้มี Query ไหนรันนานเกิน 30 วินาที SELECT pid, query, state, now() - query_start AS duration FROM pg_stat_activity WHERE state != 'idle' AND now() - query_start > interval '30 seconds';
สรุป
การ Monitor PostgreSQL มีหลายวิธี ทั้งการใช้ Views ภายในอย่าง pg_stat_activity
, pg_stat_statements
และการใช้เครื่องมือภายนอกอย่าง Prometheus + Grafana หากนำมาประยุกต์ใช้อย่างเหมาะสม จะช่วย DBA และ Developer ติดตาม Performance และแก้ไขปัญหาได้อย่างทันท่วงที
SEO Keywords
PostgreSQL Monitoring,pg_stat_activity,pg_stat_statements,Prometheus PostgreSQL,Grafana PostgreSQL Dashboard,Postgres Performance Monitoring,Slow Query PostgreSQL