Postgresql 8.4偶然挂起JDBC访问

前端之家收集整理的这篇文章主要介绍了Postgresql 8.4偶然挂起JDBC访问前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个非常数据库密集的应用程序运行了很多小时,并使用多个线程,所有这些都通过JDBC与 Postgresql通信.我看到的症状是偶尔(每次“运行”中有一到三次),我遇到了一个或多个卡住的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)

我会想到一些锁定问题,除了很多次只有一个线程被卡住.我在这个状态中看到的至少一个查询是一个REINDEX,所以查询可能要花费一些时间.希望找到解决方案,我将JDBC驱动程序从8.4升级到9.1,但问题仍然存在. Postgresql日志中也没什么不寻常的.任何进一步诊断的想法(使用pg_locks除外)?

有一件很明显的事情您可以尝试:将Postgresql本身更新到9.1版本.
你也可以记录所有 long running statements,这可能会给你一个线索.
Set log_min_duration_statement = 2000

或者任何阈值适合你.
我不知道如何解释线程转储,但这行看起来很奇特:

  • locked <0x2c023e10> (a org.postgresql.core.v3.QueryExecutorImpl)

什么是锁定?而且你注意到它是如何拼写在一个org.postgresql.cor …“.这是一个复制粘贴的人工制品还是原始的信息?如果是这样,可能有助于找到原产地.

猜你在找的Postgre SQL相关文章