Postgres sunucusunda zaman aşımını sınırlamak mümkün müdür?


18

Uygulamamda (istemci tarafı) bağlantı ve komut zaman aşımı süresini 10 dakikaya ayarladım.

Benim uygulama basit bir sorgu çalıştırır: SELECT pg_sleep(65)

Bazı sunucularda iyi çalışır, ancak diğer sunucular 60 saniye sonra bağlantıyı kapatır.

Bu, zaman aşımlarını sınırlayan ve istemci ayarlarımı yok sayan bir çeşit PostgreSQL sunucusu yapılandırması olabilir mi?


Geçerli zaman aşımını görmek için:SHOW statement_timeout;
Kullanıcı 11

Yanıtlar:


29

Evet mümkün

Dokümanlarda belirtilen iki ayar vardır ( idle_in_transaction_session_timeout9.6x sürümü için yeni)

  • statement_timeout (Tam sayı)

    Komutun istemciden sunucuya ulaştığı andan başlayarak, belirtilen milisaniyeden daha uzun süren herhangi bir ifadeyi iptal edin. Log_min_error_statement, ERROR veya daha düşük bir değere ayarlanırsa, zaman aşımına uğrayan ifade de günlüğe kaydedilir. Sıfır değeri (varsayılan) bunu kapatır.

    Tüm oturumları etkileyeceğinden postgresql.conf dosyasında ifade_timeout ayarının yapılması önerilmez.

  • idle_in_transaction_session_timeout (Tam sayı)

    Milisaniye cinsinden belirtilen süreden daha uzun süredir boşta olan açık bir işlemle oturumu sonlandırın. Bu, o oturum tarafından tutulan tüm kilitlerin serbest bırakılmasına ve bağlantı yuvasının yeniden kullanılmasına olanak tanır; aynı zamanda sadece bu işlemde görülen kapların vakumlanmasına izin verir. Bununla ilgili daha fazla bilgi için Bölüm 24.1'e bakınız.

    Varsayılan 0 değeri bu özelliği devre dışı bırakır.

İçin Bu önemlidir değil set statement_timeoutsen eğlence istemedikçe postgresql.conf.

İşte bunun bir örneği

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

Her iki ayar da yapılandırma dosyasında mevcut olduğundan, varsayılanları kullanıyorum. :( Başka fikir var mı?
Andrzej Gis

@gisek, yerel IP yığınızda veya güvenlik duvarında ağ düzeyinde bir şey olabilir.
Evan Carroll

4

Kutunun dışında değil. Yine de, ayarlarınızı yok sayan özel bir sunucuyu derlemek oldukça kolay olurdu.

Ancak çok daha büyük olasılıkla, bağlantılarınızın boş bağlantıları sevmeyen bir güvenlik duvarı veya ağ geçidi tarafından kesilmiş olması.

Sunucunun günlük dosyasına erişiminiz varsa, bu iyi bir ipucu vermelidir. İstemci, sunucunun bağlantıyı beklenmedik bir şekilde kapattığını ve sunucunun istemcinin bağlantıyı beklenmedik bir şekilde kapattığını söylerse, büyük olasılıkla istemci ile sunucu arasında bağlantıyı gerçekten kesen bir şeydir.


Kesinlikle var değil apt-get sadece normal şeyler - Özel bir derlenmiş sunucusu. Lütfen daha fazla güvenlik duvarı ve ağ geçidi kablosu hazırlar mısınız? Nasıl doğrulayıp düzeltebilirim?
Andrzej Gis

-2

Evet mümkün. Ayarlamanız gereken bazı Bağlantı Parametreleri vardır.

Lütfen aşağıdaki bağlantıya bakın. https://jdbc.postgresql.org/documentation/head/connect.html

loginTimeout connectTimeout soketiTimeout cancelSignalTimeout


2
Bunlar, bir istemcinin bağlantısını kesmek için sunucuda yapılandırılabilen ayarlar değil, veritabanı bağlantısının istemci tarafı için ayarlardır. OP, sunucu tarafı bağlantı zaman aşımı ayarlarını arıyor.
John aka hot2use
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.