Mam bardzo intensywną bazę danych, która działa przez wiele godzin i używa wielu wątków, wszystkie rozmawiają z PostgreSQL za pośrednictwem JDBC. Objawem, który widzę, jest to, że sporadycznie (jeden do trzech razy na każdy "bieg") kończę z jednym lub więcej zablokowanymi połączeniami JDBC, które wydają się czekać na odpowiedź z bazy danych, ale wydają się czekać na zawsze. Zrzut wątek jest w następujący sposób:Postgresql 8.4 okazjonalne zawieszenie z dostępem JDBC
"Thread-4367355" daemon prio=6 tid=0x04920c00 nid=0x1e88 runnable [0x04bef000]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at org.postgresql.core.VisibleBufferedInputStream.readMore(VisibleBufferedInputStream.java:135)
at org.postgresql.core.VisibleBufferedInputStream.ensureBytes(VisibleBufferedInputStream.java:104)
at org.postgresql.core.VisibleBufferedInputStream.read(VisibleBufferedInputStream.java:73)
at org.postgresql.core.PGStream.ReceiveChar(PGStream.java:255)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1165)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:191)
- locked <0x2c023e10> (a org.postgresql.core.v3.QueryExecutorImpl)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:452)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:337)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:329)
bym myślał o jakimś blokowania problem z tym, że wiele razy tylko jeden wątek jest zablokowany. Przynajmniej jedno z zapytań, które widziałem w tym stanie, to REINDEX, więc możliwe jest, że zapytanie zajmuje sporo czasu. W nadziei na znalezienie rozwiązania zaktualizowałem sterownik JDBC z wersji 8.4 na 9.1, ale problem nadal występuje. Nie ma nic niezwykłego w dziennikach PostgreSQL. Jakieś pomysły na dalszą diagnostykę (inną niż używanie pg_locks)?
Czy udało Ci się rozwiązać problem? Mamy do czynienia z tym samym "zawiesić się" również na 9.1 –
Mam ten sam problem, Postgresql 8.4, sterownik JDBC 9.1. Zapytanie to złożone usunięcie. Proces na serwerze zaczyna wykorzystywać 100% procesora, a następnie nagle spada do 0% i pozostaje na zawsze w 0%. Nić klienta działa tak jak powyżej. – BrunoJCM
Pamiętaj, że jeśli zawiesza się i mówi "ZABLOKOWANE oczekiwanie na obiekt XXX", co może oznaczać, że twoje połączenie postgresem próbuje zostać użyte przez wiele wątków [nie w tym przypadku oczywiście, tak jak w notatce] – rogerdpack