Каков наилучший способ выполнить массовое обновление всех записей в большой таблице в MySQL?
Во время процесса очистки мы обновляем все строки в таблице пользователей, которая имеет 28M строк, дозамаскировать несколько столбцов.В настоящее время на выполнение граблей уходит около 2 часов, а срок действия сеанса AWS также составляет 2 часа.Если задача rake занимает больше времени, чем истекает сеанс, сборка завершится неудачей.
Из-за большого количества записей мы обновляем 25K строк за раз, используя find_in_batches, а затем update_all в результатах.Мы дросселируем между каждой партией, спя в течение 0,1 с, чтобы избежать высокой загрузки ЦП.
Итак, вопрос в том, можем ли мы как-нибудь оптимизировать массовое обновление или мы увеличим срок действия сеанса AWS до 3 часов?
Один из вариантов - пакетирование по диапазонам идентификаторов., а не по точным размерам партии.Таким образом, обновление между идентификатором 1-100000, затем 100001-200000 и так далее.Это позволяет избежать больших наборов идентификаторов, передаваемых по кругу.Поскольку в идентификаторах будут пропуски, каждый пакет будет иметь разный размер, но это не может быть проблемой.
Спасибо за ваш вклад.