PostgreSQL ALTER TABLE занимает 35 минут - PullRequest
0 голосов
/ 20 января 2019
ALTER TABLE table1 ADD COLUMN category_id integer

Я выполнил этот запрос на производстве с нагрузкой на сервер. Согласно данным, это заняло 35 минут.

это table1 имеет около 100 миллионов строк.

35 минут нормально? Есть ли способ, которым я могу выполнить такие простые миграции (добавив столбец с нулем), не блокируя таблицу?

1 Ответ

0 голосов
/ 21 января 2019

Эта команда займет всего доли секунды.

Вы, должно быть, потратили 35 минут ожидания, чтобы получить блокировку ACCESS EXCLUSIVE на столе (все время блокируя любую транзакцию, достаточно неудачную для того, чтобы быть в очереди позади вас).

Возможно, у вас проблема с длинными транзакциями. Обычно они должны быть как можно короче, в противном случае они удерживают замки в течение длительного времени и также не позволяют VACUUM очистить версии мертвых строк.

Блокировка необходима, но она не должна создавать проблемы при работе базы данных с хорошим поведением.

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