У меня есть база данных Postgres с двумя (и только двумя) процессами.Один из них делает много (сотни в секунду) обновлений для TABLE_A.Второй процесс также обновляет TABLE_A, но может обновлять только дюжину записей в минуту.
TABLE_A относительно мала (30 тысяч записей), и ОБНОВЛЕНИЯ создаются по одной строке за раз с использованием первичного ключа.
Иногда процесс будет зависать.Когда это происходит, я использую первый запрос здесь , и он обычно идентифицирует одиночную блокировку, вызванную UPDATE для TABLE_A.
Если я просто сижу и жду, в конечном итоге блокировка исчезает, и оба процесса запускаютсяснова работаетКак правило, это занимает от 60 до 200 секунд.
Почему для сортировки требуется так много времени?
Обычно каждый процесс может выполнять свою работу за доли секунды, я бы подумал, чтодаже когда происходит взаимоблокировка, первый процесс завершит свое ОБНОВЛЕНИЕ, снимите свою блокировку, позволяя второму процессу следовать со своим собственным ОБНОВЛЕНИЕМ?Или я что-то пропустил?