Эксклюзивная блокировка PostgreSQL останавливает приложение - PullRequest
3 голосов
/ 20 июля 2009

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

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

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

1 Ответ

7 голосов
/ 20 июля 2009

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

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

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

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