Ho un'applicazione molto alta intensità di dati che si estende per molte ore e utilizza più thread, tutti a parlare di PostgreSQL tramite JDBC. Il sintomo che sto vedendo è che occasionalmente (da una a tre volte di ogni "esecuzione") finisco con una o più connessioni JDBC bloccate, che sembrano essere in attesa di una risposta dal database ma sembrano aspettarsi per sempre. La discarica filo è la seguente:PostgreSQL 8.4 occasionali appendere con accesso 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)
avrei pensato di una sorta di bloccaggio problema, tranne che molte volte un solo thread è bloccato. Almeno una delle query che ho visto in questo stato era un REINDEX, quindi è possibile che la query richieda un bel po 'di tempo. Nella speranza di trovare una soluzione, ho aggiornato il driver JDBC da 8.4 a 9.1 ma il problema si verifica ancora. Niente di insolito nei registri di Postgresql. Qualche idea per ulteriori diagnosi (oltre all'uso di pg_locks)?
siete riusciti a risolvere il problema? Siamo di fronte allo stesso 'blocco' anche su 9.1 –
Sto vivendo lo stesso problema, Postgresql 8.4, driver JDBC 9.1. La query è una cancellazione complessa. Il processo sul server inizia a utilizzare il 100% della CPU, quindi scende improvvisamente allo 0% e rimane nello 0% per sempre. Il thread del client si blocca come sopra. – BrunoJCM
NB che se si blocca e dice "bloccato in attesa per oggetto XXX" che può significare la vostra connessione Postgres sta tentando di essere utilizzato da più thread [non è il caso in questo caso, naturalmente, proprio come una nota] – rogerdpack