Có vẻ như bạn có lỗ kết nối kết nối trong đơn đăng ký của mình vì nó không đóng được kết nối được gộp chung. Bạn không gặp sự cố chỉ với các phiên <idle> in transaction
, nhưng với quá nhiều kết nối tổng thể.
Kết nối giết người không phải là câu trả lời đúng cho điều đó, nhưng đó là giải pháp tạm thời OK-ish.
Thay vì khởi động lại PostgreSQL để khởi động tất cả các kết nối khác khỏi cơ sở dữ liệu PostgreSQL, hãy xem: How do I detach all other users from a postgres database? và How to drop a PostgreSQL database if there are active connections to it?. Sau đó cho thấy một truy vấn tốt hơn.
Để đặt thời gian chờ, như @Doon đề xuất, hãy xem How to close idle connections in PostgreSQL automatically?, lời khuyên bạn nên sử dụng PgBouncer cho proxy cho PostgreSQL và quản lý các kết nối không sử dụng. Đây là một ý tưởng rất tốt nếu bạn có một ứng dụng lỗi mà rò rỉ kết nối anyway; Tôi rất mạnh mẽ khuyên bạn nên định cấu hình PgBouncer.
A TCP keepalive sẽ không thực hiện công việc ở đây, bởi vì ứng dụng vẫn còn kết nối và còn sống, nó không nên.
Trong PostgreSQL 9.2 trở lên, bạn có thể sử dụng cột dấu thời gian state_change
mới và trường status
pg_stat_activity
để triển khai trình kết nối rảnh rỗi. Có một công việc cron chạy một cái gì đó như thế này:
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE datname = 'regress'
AND pid <> pg_backend_pid()
AND state = 'idle'
AND state_change < current_timestamp - INTERVAL '5' MINUTE;
Trong các phiên bản cũ, bạn cần triển khai các đề án phức tạp theo dõi khi kết nối không hoạt động. Đừng bận tâm; chỉ cần sử dụng pgbouncer.
Nguồn
2012-11-06 05:37:49
thế nào bạn kết nối với DB? socketTimeout có thể là những gì bạn đang tìm kiếm. – Doon
Chúng tôi có ứng dụng web Pylons kế thừa này và chúng tôi đã sử dụng SQLAlchemy nhưng dường như chúng tôi đã không sử dụng đúng cách. Tôi không nhớ. Chúng tôi đang cố gắng sửa lỗi. 'socketTimeout' từ tài liệu có vẻ như điều này hoàn toàn đóng kết nối với DB. Tôi đang cố gắng đóng mỗi nhàn rỗi, và bộ đếm bắt đầu ngay sau khi kết nối được thiết lập. – user1012451
xem http://stackoverflow.com/questions/12391174/is-it-possible-to-configure-postgresql-to-automatically-close-idle-connections – Doon