Apakah mungkin membatasi batas waktu di server Postgres?

16

Saya mengatur koneksi dan timeout perintah ke 10 menit di aplikasi saya (sisi klien).

Daripada aplikasi saya menjalankan kueri sederhana: SELECT pg_sleep(65)

Pada beberapa server berfungsi dengan baik, tetapi server lain menutup koneksi setelah 60 detik.

Mungkinkah ini semacam konfigurasi server PostgreSQL yang membatasi batas waktu dan mengabaikan pengaturan klien saya?

Andrzej Gis
sumber
Untuk melihat batas waktu saat ini:SHOW statement_timeout;
Pengguna

Jawaban:

26

Iya itu mungkin

Ada dua pengaturan yang disebutkan dalam dokumen ( idle_in_transaction_session_timeoutbaru untuk versi 9.6x)

  • statement_timeout (bilangan bulat)

    Batalkan pernyataan apa pun yang membutuhkan lebih dari jumlah milidetik yang ditentukan, mulai dari saat perintah diterima di server dari klien. Jika log_min_error_statement diatur ke ERROR atau lebih rendah, pernyataan yang kehabisan waktu juga akan dicatat. Nilai nol (default) mematikan ini.

    Pengaturan statement_timeout di postgresql.conf tidak disarankan karena akan memengaruhi semua sesi.

  • idle_in_transaction_session_timeout (bilangan bulat)

    Hentikan sesi apa pun dengan transaksi terbuka yang telah menganggur lebih lama dari durasi yang ditentukan dalam milidetik. Ini memungkinkan setiap kunci yang dipegang oleh sesi itu dilepaskan dan slot koneksi digunakan kembali; itu juga memungkinkan tupel yang hanya terlihat oleh transaksi ini untuk disedot. Lihat Bagian 24.1 untuk detail lebih lanjut tentang ini.

    Nilai default 0 menonaktifkan fitur ini.

Sangat penting untuk tidak mengatur statement_timeoutdi postgresql.conf kecuali Anda ingin hiburan.

Berikut ini contoh kerjanya

SET statement_timeout = 10000;
SET
test=# SELECT pg_sleep(15);
ERROR:  canceling statement due to statement timeout
Evan Carroll
sumber
Pengaturan tidak ada dalam file konfigurasi, jadi saya menggunakan default. :( Ada ide lain?
Andrzej Gis
@ gisek yakin, itu bisa berupa sesuatu di tingkat jaringan, baik di tumpukan IP lokal Anda atau di firewall.
Evan Carroll
4

Tidak keluar dari kotak. Akan sangat mudah untuk mengkompilasi server khusus yang mengabaikan pengaturan Anda.

Tetapi jauh lebih mungkin adalah bahwa koneksi Anda terputus oleh firewall atau gateway yang tidak suka koneksi idle.

Jika Anda memiliki akses ke file log server, itu akan memberikan petunjuk yang baik. Jika klien mengatakan server menutup koneksi secara tidak terduga, dan server mengatakan klien menutup koneksi secara tidak terduga, maka mungkin ada sesuatu di antara klien dan server yang sebenarnya memutuskan koneksi.

jjanes
sumber
Ini jelas bukan server yang dikompilasi khusus - hanya barang biasa dari apt-get. Bisakah Anda menjelaskan lebih lanjut tentang firewall dan lead gateway? Bagaimana saya bisa memverifikasi dan memperbaikinya?
Andrzej Gis
-2

Ya itu mungkin. Ada beberapa Parameter Koneksi yang perlu Anda atur.

Silakan lihat tautan di bawah ini. https://jdbc.postgresql.org/documentation/head/connect.html

loginTimeout connectTimeout socketTimeout cancelSignalTimeout

Kavita Patil
sumber
2
Ini adalah pengaturan untuk sisi klien dari koneksi database dan bukan pengaturan yang dapat dikonfigurasikan di server untuk memutuskan koneksi klien. OP sedang mencari pengaturan batas waktu koneksi sisi-server.
John aka hot2use