Я пытаюсь использовать 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, но безуспешно.
Почему были созданы замки? Есть ли способ избежать этих блокировок, если нет причин для запроса зависеть от других?
Спасибо за любую помощь