Có thể giới hạn thời gian chờ trên máy chủ Postgres không?


16

Tôi đặt thời gian chờ kết nối và lệnh thành 10 phút trong ứng dụng của mình (phía máy khách).

Hơn ứng dụng của tôi chạy một truy vấn đơn giản: SELECT pg_sleep(65)

Trên một số máy chủ, nó hoạt động tốt, nhưng các máy chủ khác đóng kết nối sau 60 giây.

Đây có thể là một loại cấu hình máy chủ PostgreSQL giới hạn thời gian chờ và bỏ qua các cài đặt máy khách của tôi không?


Để xem thời gian chờ hiện tại:SHOW statement_timeout;
Người dùng

Câu trả lời:


26

Vâng nó có thể

hai cài đặt được đề cập trong tài liệu ( idle_in_transaction_session_timeoutmới đối với phiên bản 9.6x)

  • statement_timeout (số nguyên)

    Hủy bỏ bất kỳ câu lệnh nào mất nhiều hơn số mili giây đã chỉ định, bắt đầu từ thời điểm lệnh đến máy chủ từ máy khách. Nếu log_min_error_statement được đặt thành ERROR hoặc thấp hơn, câu lệnh hết thời gian cũng sẽ được ghi lại. Giá trị bằng 0 (mặc định) sẽ tắt.

    Không nên thiết lập statement_timeout trong postgresql.conf vì nó sẽ ảnh hưởng đến tất cả các phiên.

  • idle_in_transaction_session_timeout (số nguyên)

    Chấm dứt bất kỳ phiên nào với một giao dịch mở đã không hoạt động lâu hơn thời lượng quy định tính bằng mili giây. Điều này cho phép mọi khóa được giữ bởi phiên đó được giải phóng và khe kết nối được sử dụng lại; nó cũng cho phép các bộ dữ liệu chỉ hiển thị cho giao dịch này được hút bụi. Xem Phần 24.1 để biết thêm chi tiết về điều này.

    Giá trị mặc định là 0 sẽ vô hiệu hóa tính năng này.

Điều quan trọng là không đặt statement_timeouttrong postgresql.conf trừ khi bạn muốn giải trí.

Đây là một ví dụ về nó hoạt động

SET statement_timeout = 10000;
SET
test=# SELECT pg_sleep(15);
ERROR:  canceling statement due to statement timeout

Không có cài đặt nào có trong tệp cấu hình, vì vậy tôi đang sử dụng mặc định. :( Còn ý tưởng nào khác không?
Andrzej Gis

@gisek chắc chắn, nó có thể là một cái gì đó ở cấp độ mạng, trong ngăn xếp IP cục bộ của bạn hoặc ở tường lửa.
Evan Carroll

4

Không ra khỏi hộp. Tuy nhiên, thật dễ dàng để biên dịch một máy chủ tùy chỉnh mà bỏ qua cài đặt của bạn.

Nhưng nhiều khả năng là các kết nối của bạn đang bị cắt bởi tường lửa hoặc cổng không giống như kết nối nhàn rỗi.

Nếu bạn có quyền truy cập vào tệp nhật ký của máy chủ, điều đó sẽ cho một manh mối tốt. Nếu máy khách nói rằng máy chủ đóng kết nối bất ngờ và máy chủ nói rằng máy khách đã đóng kết nối bất ngờ, thì đó có thể là một cái gì đó ở giữa máy khách và máy chủ thực sự đang cắt đứt kết nối.


Đây chắc chắn không phải là một máy chủ được biên dịch tùy chỉnh - chỉ là những thứ thông thường từ apt-get. Bạn có thể vui lòng xây dựng thêm tường lửa và cổng dẫn? Làm thế nào tôi có thể xác minh và sửa chữa nó?
Andrzej Gis

-2

Vâng, điều đó là có thể. Có một số Thông số kết nối mà bạn cần đặt.

Vui lòng tham khảo liên kết dưới đây. https://jdbc.postgresql.org/documentation/head/connect.html

loginTimeout connectTimeout socketTimeout hủySignalTimeout


2
Đây là các cài đặt cho phía máy khách của kết nối cơ sở dữ liệu và không phải là cài đặt có thể được cấu hình trên máy chủ để ngắt kết nối máy khách. OP đang tìm kiếm các thiết lập thời gian chờ kết nối phía máy chủ.
John aka hot2use
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.