Задать вопрос
@beduin01

Можно ли как-то отследить прогресс добавления колонки в БД?

Потребовалось добавить колонку (series) в большую таблицу. Более 100млн строк.
Колонка заблокировалась. Все висит уже почти сутки. Можно как-то оценить сколько еще осталось времени ждать?
  • Вопрос задан
  • 76 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@rPman
загляни в файловую систему и посмотри с какой скоростью растет tablespace файлы, так же можно с помощью запроса
select pg_tablespace_size ('new_tablespace');
так как в момент добавления колонки таблица копируется (это потому что default значение прописано) значит места должно потребоваться приблизительно в два раза больше чем было изначально, соответственно оценивай приблизительно по скорости роста файла

https://habr.com/ru/company/yandex/blog/435880/
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
С sql-базами лучше такого не делать.
Расширение большой таблицы может привести к непредсказуемым результатам., как у Вас.
Вариантов несколько.
- создать дополнительную таблицу со связью 1-1 и нужными полями, ее джойнить по необходимости. Быстор, просто, молодежно.
- создать новую таблицу и в нее перелить данные, ппреливать можно постепенно.
Ответ написан
Комментировать
mayton2019
@mayton2019
Bigdata Engineer
Нужно добавлять в часы когда пользователи не работают с БД. И добавлять в несколько этапов.
Сначала просто добавить колонку. Потом ее дефолтное значение обновить. Это можно порциями делать.
Потом констрейнты и триггеры добавить. И смотри чтоб ты не пересекался с джобом который делает
вакуум.

Сколько времени - ждать ХЗ. Наверное в PG есть monitoring views которые показывают текущие активности.
Но это я не знаю. Пусть другие подскажут.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы