Как добавить поле в высоконагруженную базу в таблицу на продакшене где 100 миллионов записей?

Как можно добавить поле в высоконагруженную базу в таблицу на продакшене где 100 миллионов записей в разные базы данных без ее отказа?
  • Вопрос задан
  • 1901 просмотр
Решения вопроса 2
Melkij
@Melkij
PostgreSQL DBA
Могу ответить про postgresql.

без ее блокировки

Именно в такой постановке вопроса - никак.

С короткой блокировкой (доли секунд) - другое дело. Принципиально зависит от конкретного alter table и версии базы
Простой alter table foo add column col; - ставите statement_timeout to '100ms' и вносите как есть.
alter table foo add column col default const - после pg11 см. выше, до - интересное приключение
Если default не константа - сначала внесите как default null, затем обновляете частями. как в процессе до pg11.
Ответ написан
Комментировать
В MySQL 8+ добавили ALGORITHM=INSTANT к синтаксису:
ALTER TABLE table_name [alter_specification], ALGORITHM=INSTANT;

The benefit of the INSTANT algorithm is that only metadata changes are made in the data dictionary. There is no need to acquire metadata lock during SE changes and we don’t touch the data of the table.

https://mysqlserverteam.com/mysql-8-0-innodb-now-s...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
vitalaw
@vitalaw
PHP-разработчик
Как вариант для MySQL можно заюзать утилиту от гитхаб https://github.com/github/gh-ost
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы