36млрд строк.... стоит задача обновить значение существующей колонки ... таблица шардирована по shard_id, но в каждом шарде порядки тоже около 5 лямов строк на шард
UPDATE "entities" SET "field_value" = 'foo' WHERE "entities"."shard_id" = 1 на шарде с 5 млн записей бежит примерно 5 минут
запуск на всю базу затянет часов на 15, что не очень . Знает ли кто-то любые альтерантивные способы сделать это быстрее или менее затратно по ресурсам?
postgres 10.10 с экстеншеном citus для шардирования. Читал что в 11 версии можно это сделать через set default и таблица не лочится, но у нас 10-я версия (
Быстрее -- это параллельное выполнение задействовать. С шардами это должно сработать, если они на разных хостах. Чтобы надолго не лочить, надо много за раз не обновлять. Это значит, батчи какие-то прикрутить и порциями ходить, с коммитом после каждых N апдейтов (может, и с паузой, чтобы дать спокойно записаться и прочим сессиям поработать).
Обсуждают сегодня