Tôi muốn theo dõi khóa liên tục trong các bưu cục liên tục.Làm cách nào để phát hiện truy vấn chứa khóa trong Postgres?
Tôi đã xem qua bài viết Locks Monitoring và cố gắng để chạy các truy vấn sau đây:
SELECT bl.pid AS blocked_pid,
a.usename AS blocked_user,
kl.pid AS blocking_pid,
ka.usename AS blocking_user,
a.query AS blocked_statement
FROM pg_catalog.pg_locks bl
JOIN pg_catalog.pg_stat_activity a ON a.pid = bl.pid
JOIN pg_catalog.pg_locks kl ON kl.transactionid = bl.transactionid AND kl.pid != bl.pid
JOIN pg_catalog.pg_stat_activity ka ON ka.pid = kl.pid
WHERE NOT bl.granted;
Thật không may, nó không bao giờ trở lại không có sản phẩm nào tập kết quả. Nếu tôi đơn giản hóa truy vấn được cung cấp cho biểu mẫu sau:
SELECT bl.pid AS blocked_pid,
a.usename AS blocked_user,
a.query AS blocked_statement
FROM pg_catalog.pg_locks bl
JOIN pg_catalog.pg_stat_activity a ON a.pid = bl.pid
WHERE NOT bl.granted;
thì nó sẽ trả về các truy vấn đang chờ khóa. Nhưng tôi không thể quản lý để thay đổi nó để nó có thể trả về cả hai truy vấn bị chặn và chặn.
Bất kỳ ý tưởng nào?
một truy vấn chặn là gì? Đó là một giao dịch nắm giữ một khóa, truy vấn cụ thể đã lấy nó có thể được hoàn thành và đi trong giao dịch đó, trong khi khóa vẫn được giữ. –
Nghe có vẻ hợp lý, nhưng các tác giả bài viết về Khóa Giám sát có ý nghĩa gì trong trường hợp này? – Roman
Điều đó chỉ hiển thị các khóa cấp hàng. Tôi thấy cái này hữu ích hơn (mặc dù phức tạp hơn) vì nó cũng hiển thị các khóa mức đối tượng: http://wiki.postgresql.org/wiki/Lock_dependency_information – jjanes