Конфликт блокировки Postgres - почему на очистку уходит так много времени? - PullRequest
0 голосов
/ 19 октября 2018

У меня есть база данных Postgres с двумя (и только двумя) процессами.Один из них делает много (сотни в секунду) обновлений для TABLE_A.Второй процесс также обновляет TABLE_A, но может обновлять только дюжину записей в минуту.

TABLE_A относительно мала (30 тысяч записей), и ОБНОВЛЕНИЯ создаются по одной строке за раз с использованием первичного ключа.

Иногда процесс будет зависать.Когда это происходит, я использую первый запрос здесь , и он обычно идентифицирует одиночную блокировку, вызванную UPDATE для TABLE_A.

Если я просто сижу и жду, в конечном итоге блокировка исчезает, и оба процесса запускаютсяснова работаетКак правило, это занимает от 60 до 200 секунд.

Почему для сортировки требуется так много времени?

Обычно каждый процесс может выполнять свою работу за доли секунды, я бы подумал, чтодаже когда происходит взаимоблокировка, первый процесс завершит свое ОБНОВЛЕНИЕ, снимите свою блокировку, позволяя второму процессу следовать со своим собственным ОБНОВЛЕНИЕМ?Или я что-то пропустил?

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