PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

błąd postgresql:anulowanie wyciągu z powodu żądania użytkownika

Ustaliliśmy przyczynę tego problemu. Wyjaśnia to błędna implementacja setQueryTimeout() w najnowszych sterownikach JDBC 9.2-100x. Może się to nie zdarzyć, jeśli ręcznie otworzysz/zamkniesz połączenie, ale bardzo często zdarza się to przy włączonej puli połączeń i automatycznym zatwierdzaniu ustaw fałsz . W takim przypadku należy wywołać setQueryTimeout() z wartością niezerową (na przykład przy użyciu adnotacji @Transactional( timeout =xxx ) frameworka Spring).

Okazuje się, że ilekroć podczas wykonywania instrukcji zostanie zgłoszony wyjątek SQL, licznik czasu anulowania nie został anulowany i pozostaje aktywny (tak jest zaimplementowany). Z powodu buforowania połączenie za nie jest zamykane, ale jest zwracane do puli. Później, po wyzwoleniu zegara anulowania, losowo anuluje zapytanie aktualnie skojarzone z połączeniem, z którym ten zegar został utworzony. W tej chwili jest to zupełnie inne zapytanie, które wyjaśnia efekt losowości.

Sugerowanym obejściem tego problemu jest rezygnacja z setQueryTimeout() i użycie konfiguracji PostgreSQL (statement_timeout). Nie zapewnia tego samego poziomu elastyczności, ale przynajmniej zawsze działa.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chmura Barmana – Część 1:Archiwum WAL

  2. SQLAlchemy with_for_update blokowanie wierszy nie działa?

  3. wyłącz UWAGI w wyjściu psql

  4. jak obliczyć salda w programie księgowym za pomocą funkcji okna postgres

  5. Jak zmienić pole identyfikatora automatycznego numerowania na typ seryjny w PostgreSQL?