我使用事务应用程序运行postgresql,其中堆栈是: PostgreSQL的 tomcat的 休眠/春天
这是一个生产应用程序,我们有一堆客户同时连接。每个客户都有自己的postgresql数据库,但每个客户也有很多用户。
偶尔,我会遇到一个客户数据库锁定的情况,我看到与该客户的流程相关的交易闲置。
postgres:customer1 customer1 127.0.0.1(59738)交易闲置
当数据库锁定时,其他数据库继续正常工作。如果不重新启动服务器应用程序,我无法解锁。
问题通常由客户运行的各种长时间运行报告触发。我认为这是一个锁定/阻塞问题,其他用户也在访问客户数据库中的相同数据。
这个问题很少发生,我无法复制它。但是当它确实发生时,这是一个严重的问题。大多数情况下,我只想从中恢复过来。
发生这种情况时,Postgresql似乎能正常运行。就像我可以对数据库执行psql并运行查询。所以,我认为问题或者说解决方案以数据源为中心。
我使用apache commons BasicDataSource。
<bean id="customer1DataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="org.postgresql.Driver"/>
<property name="url" value="jdbc:postgresql://localhost:5432/customer1"/>
<property name="username" value="customer1"/>
<property name="password" value="password"/>
</bean>
那么有没有人知道基本数据源中的设置会在事务连接中终止这些空闲,抛出异常或允许它们以某种方式恢复?