PostgreSQL上挂着多线程数据处理

时间:2010-08-27 13:05:13

标签: java multithreading postgresql

我正在尝试使用新处理器中的8个线程来处理PostgreSQL数据库上的事务。它必须在PostGIS中处理地理数据,我已经只使用1个处理器核心(一个线程)。我正在使用Java(JDBC4)为每个线程创建一个Connection。每个连接接收作业以处理几何实体组,其中一个SELECT和一个UPDATE语句用于每个实体。每个实体都由唯一ID处理,并且不使用任何关系函数,因此事务之间没有依赖关系。

可以使用可变数量的线程启动应用程序。当我运行它时,除了其中一个线程之外的所有线程都挂起。即使我尝试只运行两个线程,一个挂起。使用pgAdmin3中的“服务器状态”工具,我可以看到所有挂起的线程都是“事务中的IDLE”,一些处于“ExclusiveLock”模式,一些处于“RowExclusiveLock”模式,一些处于“AccessShareLock”模式。

我按照http://jayant7k.blogspot.com/2010/06/postgresql-tuning-quick-tips.html

中的说明调整了postgresql.conf

我试图在UPDATE语句之后立即让线程暂停一段时间但没有成功。

为什么要创建锁?有没有办法避免这些锁,一旦没有理由依赖于其他查询?

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

您是否为JDBC连接设置了min-pool-size和max-pool-size?

在您的情况下,最低应为8。