2009-07-20 2 views
3

Мои тесты приложений довольно сложны в базе данных. Они запускают инструкции create, drop и alter table. Тем не менее, я бы все же ожидал, что postresql обработает их даже в случае тупиковой ситуации (например, обнаружит блокировку и вытащит один поток). Я также не запускаю запросы одновременно.Исключительная блокировка PostgreSQL останавливает приложение

Однако в моем случае он просто замерзает, и мне приходится вручную их убивать вручную (это работает, если я немного изменяю порядок запуска, но это не дает мне доверия). Блокировки показывают, что оператор create table имеет исключительную блокировку, и транзакция также имеет один.

Кто-нибудь испытал что-то подобное? Существуют ли какие-либо настройки сервера, которые могут помочь? Или просто посоветуете?

ответ

7

PostgreSQL автоматически определяет взаимоблокировки. Скорее всего, вы только блокируете какое-то утверждение где-то, что еще не закончилось. Тупик возникает только в том случае, если два оператора ждут друг друга.

Если вы изучите свое «дерево блокировки» до корня (d блокировка b блокировки на a имеет в корневом каталоге), вы, скорее всего, найдете транзакцию где-нибудь, что либо занимает много времени, либо не выполняется должным образом, а просто находится в режиме «бездействия».

Поскольку вы упоминаете темы, хотя - помните, что все клиентские библиотеки не обязательно являются потокобезопасными на стороне клиента.

+1

Спасибо. Это был простоя в транзакции, http://wiki.dspace.org/index.php/Idle_In_Transaction_Problem, помог мне отладить, что вызвало транзакцию, хотя я все еще не уверен, что это не будет agian. –

Смежные вопросы