การ Monitor ด้วย pg_stat_activity, pg_stat_statements, Prometheus + Grafana

Sharing is caring!

ในการดูแลระบบฐานข้อมูล 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

Leave a Reply

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