Cách kiểm tra / biết các truy vấn chạy cao nhất


9

Tôi muốn thu thập số liệu thống kê về các truy vấn chạy cao nhất trong cơ sở dữ liệu của tôi.

Vì vậy, tôi cần biết làm thế nào tôi có thể theo dõi các truy vấn để tôi có thể tạo các chế độ xem hoặc chế độ xem được cụ thể hóa để lưu trữ kết quả của các truy vấn chạy cao nhất kể từ khi tôi có DB lớn.


1
Bạn đã kiểm tra ở đây ?
Nelz


Vì tò mò, lớn như thế nào là lớn? Ngoài ra, với 'chạy cao nhất', bạn có nghĩa là các truy vấn thường xuyên nhất chạy hoặc tích lũy đắt nhất? Và, với một cái nhìn đơn giản, bạn không dành bất cứ điều gì về vấn đề này.
dezso

@ dezso: đó là 300k hàng trên bàn chính. Đắt nhất sẽ là ưu tiên nhưng tôi cũng muốn biết chạy thường xuyên nhất.
mamesaye

Như @a_horse_with_no_name đã nói .. phần mở rộng pg_stat_statements có lẽ là thứ bạn cần.
Joishi Bodio

Câu trả lời:


8

Như ai đó đã nói trong các bình luận, pg_stat_statements là cách để có được số liệu thống kê. Đặt cái này vào postgresql.conf:

shared_preload_libraries = 'pg_stat_statements'

pg_stat_statements.max = 10000
pg_stat_statements.track = all

Sau đó chạy truy vấn này:

CREATE EXTENSION pg_stat_statements; 

Sau đó, truy vấn mẫu này (được sao chép từ các tài liệu được liên kết ở trên) sẽ cung cấp cho bạn số liệu thống kê cho 5 truy vấn hàng đầu từ tất cả các cơ sở dữ liệu :

SELECT query, calls, total_time, rows,
100.0 * shared_blks_hit / nullif(shared_blks_hit + shared_blks_read, 0) AS hit_percent
FROM pg_stat_statements ORDER BY total_time DESC LIMIT 5;

Nếu bạn muốn kết quả cho một cơ sở dữ liệu , bạn cần lọc theo dbidđó bạn có thể lấy từ pg_databasetên db. Thêm mệnh đề WHERE này vào truy vấn trên:

WHERE dbid = (select oid from pg_database where datname = 'YOUR_DB_NAME')

Bạn cũng có thể tham gia.

Khi bạn đang kiểm tra điều này, có thể là một ý tưởng tốt để loại trừ các truy vấn vào chính các bảng thống kê / lược đồ, ví dụ:

AND query not similar to '%( pg_|information_schema)%'

một loạt các công cụ thương mại và miễn phí có thể giúp bạn hình dung dữ liệu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.