Cài đặt và chạy ngay trong 5 phút
Nếu đã từng quản trị PostgreSQL, chắc hẳn bạn đã gặp cảnh CPU server chạm ngưỡng 100% mà không rõ nguyên nhân. Thay vì ngồi gõ mỏi tay các câu lệnh SELECT vào pg_stat_activity, bạn nên dùng pg_activity. Công cụ này hoạt động tương tự lệnh htop nhưng được thiết kế riêng cho database.
Để bắt đầu, bạn có thể cài đặt nhanh qua trình quản lý gói. Tuy nhiên, mình khuyên dùng pip để luôn nhận được bản cập nhật mới nhất (hiện tại là bản 3.x với nhiều cải tiến).
# Trên Ubuntu/Debian
sudo apt update && sudo apt install pg-activity
# Cài qua pip (khuyên dùng cho bản mới nhất)
pip install pg_activity
Sau khi cài xong, hãy kết nối vào database bằng quyền superuser (thường là user postgres). Chỉ quyền này mới cho phép bạn quan sát toàn bộ các tiến trình của hệ thống:
pg_activity -U postgres -d postgres -h localhost
Nhập mật khẩu khi được yêu cầu. Một dashboard trực quan sẽ hiện ra, hiển thị đầy đủ thông số kết nối, CPU, RAM và danh sách query đang thực thi.
Đọc hiểu các thông số “vàng” trên dashboard
Đừng để mớ con số làm bạn bối rối. Hãy tập trung vào những khu vực trọng yếu sau đây mỗi khi hệ thống có dấu hiệu chậm chạp:
- Header (Phần đầu): Quan sát
Load Average. Nếu con số này vượt quá số lượng CPU core (ví dụ load 10.0 trên máy 4 core), server của bạn đang quá tải trầm trọng. - PID: Mã định danh tiến trình. Bạn sẽ cần con số này nếu muốn chấm dứt một query cụ thể.
- STATE: Trạng thái kết nối. Hãy đặc biệt cảnh giác với
idle in transaction. Đây là những kết nối đã mở transaction nhưng chưa commit hoặc rollback, thường là thủ phạm gây giữ lock lâu. - TIME: Thời gian query đã chạy. Một câu SELECT đơn giản mà tốn hơn 10 giây thường là dấu hiệu của việc thiếu index.
Việc pg_activity phân loại màu sắc cho các trạng thái giúp mình phản xạ cực nhanh. Chẳng hạn, các query active sẽ có màu nổi bật, giúp bạn tách biệt chúng khỏi hàng trăm kết nối idle khác.
Xử lý nhanh các câu lệnh SQL bị treo (Slow Queries)
Đây là tính năng thực dụng nhất của công cụ này. Trong thực tế, nhiều lúc ứng dụng bị deadlock hoặc chạy query không tối ưu khiến tài nguyên cạn kiệt. Thay vì phải vào psql gõ lệnh pg_terminate_backend(pid) dài dòng, bạn có thể thao tác trực tiếp.
Cách “dọn dẹp” một query gây lỗi:
- Sử dụng phím mũi tên để di chuyển đến dòng query nghi vấn.
- Nhấn phím K (Kill).
- Xác nhận thao tác. pg_activity sẽ gửi tín hiệu terminate đến backend để giải phóng tài nguyên ngay lập tức.
Mẹo nhỏ: Nhấn phím Space để tạm dừng màn hình. Việc này giúp bạn soi kỹ câu lệnh SQL dài và chọn đúng PID cần xử lý, tránh tình trạng danh sách nhảy liên tục làm bạn chọn nhầm.
Phím tắt nâng cao để tối ưu giám sát
Muốn làm chủ pg_activity như một chuyên gia, bạn nên thuộc lòng các phím tắt sau:
- Phím 1, 2, 3: Chuyển đổi nhanh chế độ hiển thị. Phím
1cho các query đang chạy,2cho các query đang chờ (Waiting) và3cho các kết nối Idle trong Transaction. - Phím c và m: Sắp xếp danh sách theo mức độ ngốn CPU hoặc Memory.
- Phím t: Sắp xếp theo thời gian chạy (Duration). Đây là cách nhanh nhất để lôi ra những “con rùa” đang làm chậm hệ thống.
- Phím r: Chỉnh thời gian làm mới (mặc định 2 giây). Nếu database đang quá tải, hãy tăng lên 5 hoặc 10 giây để giảm tải cho chính tiến trình giám sát.
# Chạy pg_activity với tần suất refresh 5 giây để tiết kiệm tài nguyên
pg_activity --refresh 5
Kinh nghiệm thực chiến: pg_activity hay Log File?
Nhiều bạn thắc mắc tại sao không dùng pg_stat_statements cho chuyên nghiệp. Câu trả lời nằm ở thời điểm sử dụng.
Log file và các extension phân tích rất tốt để tối ưu hóa định kỳ. Chúng cho bạn biết trong 24 giờ qua query nào chậm nhất. Thế nhưng, khi hệ thống đang “cháy”, khách hàng than phiền và sếp đang đứng ngay sau lưng, bạn cần câu trả lời tức thì.
Lúc đó, pg_activity là cứu cánh. Nó cung cấp cái nhìn trực diện, real-time. Bạn thấy ngay query nào đang chiếm 99% CPU và có thể tiêu diệt nó chỉ với hai lần nhấn phím.
Một kỹ thuật mình thường dùng là kết hợp với SSH tunnel cho các database nằm trong mạng nội bộ:
ssh -t user@jump-host "pg_activity -U postgres -h 10.0.1.5"
Cách này vừa an toàn, vừa giúp bạn giám sát server từ xa mà không cần mở port database ra internet. pg_activity thực sự là một công cụ nhỏ gọn nhưng đầy quyền năng mà bất kỳ ai làm việc với PostgreSQL cũng nên có sẵn trong máy.

