Многопоточная обработка данных висит на PostgreSQL - PullRequest
0 голосов
/ 27 августа 2010

Я пытаюсь использовать 8 потоков моего нового процессора для обработки транзакций в базе данных PostgreSQL. Он должен обрабатывать географические данные в PostGIS, что я уже делаю, используя только 1 процессорное ядро ​​(один поток). Я использую Java (JDBC4), чтобы создать одно соединение для каждого потока. Каждое соединение получает задание на обработку групп геометрических объектов, где для каждого объекта используются один оператор SELECT и один оператор UPDATE. Каждый объект обрабатывается уникальным идентификатором, и никакие функции отношения не используются, поэтому между транзакциями нет никаких зависимостей.

Приложение может быть запущено с переменным числом потоков. Когда я запускаю его, все, кроме одного из потоков, зависают. Даже если я пытаюсь запустить только два потока, один зависает. С помощью инструмента «Состояние сервера» из pgAdmin3 я вижу, что все зависшие потоки находятся в состоянии «IDLE в транзакции», некоторые в режиме «ExclusiveLock», некоторые в режиме «RowExclusiveLock» и некоторые в режиме «AccessShareLock».

Я настроил свой postgresql.conf, как описано в http://jayant7k.blogspot.com/2010/06/postgresql-tuning-quick-tips.html

Я пытался перевести потоки в спящий режим на некоторое время сразу после оператора UPDATE, но безуспешно.

Почему были созданы замки? Есть ли способ избежать этих блокировок, если нет причин для запроса зависеть от других?

Спасибо за любую помощь

1 Ответ

1 голос
/ 27 августа 2010

Вы установили min-pool-size и max-pool-size для соединения JDBC?

В вашем случае минимум должен быть 8.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...