Làm cách nào tôi có thể biết có bao nhiêu truy vấn mỗi giây cơ sở dữ liệu Postgres của tôi đang thực thi?
Làm cách nào tôi có thể biết có bao nhiêu truy vấn mỗi giây cơ sở dữ liệu Postgres của tôi đang thực thi?
Câu trả lời:
Sử dụng truy vấn này để đọc tổng số giao dịch được thực hiện trong tất cả các cơ sở dữ liệu:
SELECT sum(xact_commit+xact_rollback) FROM pg_stat_database;
Nếu bạn muốn cùng một bộ đếm cho chỉ một cơ sở dữ liệu, hãy sử dụng:
SELECT xact_commit+xact_rollback FROM pg_stat_database WHERE datname = 'mydb';
Để tính toán TPS (giao dịch mỗi giây), hãy chạy truy vấn nhiều lần và tính chênh lệch theo khoảng thời gian.
Có những công cụ đã sẵn sàng cho việc đó, một trong số đó là http://bucardo.org/wiki/Check_postgres
Thông tin thêm: http://www.postgresql.org/docs/9.2/static/monitoring-stats.html#PG-STAT-DATABASE-VIEW
Cập nhật: Konrad đã sửa chữa sự hiểu lầm của tôi về câu hỏi của anh ấy. Mục tiêu là để đếm các truy vấn, không phải giao dịch.
Làm thế nào để đếm truy vấn?
Phương pháp 1
Sử dụng đóng góp pg_stat_statements .
Phương pháp 2
Cho phép ghi nhật ký đầy đủ các truy vấn trong một khoảng thời gian đại diện.
Để bật ghi nhật ký đầy đủ, đối với PostgreQuery 9.0 - 9.3, hãy thay đổi các cài đặt sau trong postgresql.conf
logging_collector = on
log_line_prefix = '%t '
log_rotation_size = 1GB
log_statement = all
Nếu bạn muốn xem thêm thời gian truy vấn, bạn có thể thiết lập log_min_duration_statement = 0
thay vì của log_statement = all
. Điều này rất hữu ích để điều chỉnh truy vấn.
Sau đó tải lại cấu hình (khởi động lại hoặc HUP) và thu thập đủ nhật ký để ước tính lưu lượng.
Lưu ý: không phương thức nào sẽ bao gồm các truy vấn được nhúng trong các hàm do người dùng xác định.