Обновление 40 миллионов ячеек mysql одновременно

#mysql #mariadb

Вопрос:

Возможно ли обновить около 40 миллионов ячеек данных в mysql одновременно? Когда я говорю «обновить», я имею в виду, что беру таблицу и копирую ее часть в другую, гораздо большую таблицу. Это должно было происходить раз в час.

Комментарии:

1. Небо-это предел, особенно когда у них нет пределов, как в нашем вопросе. 40 миллионов клеток , но что такое клетка? Сразу , что такое сразу? Гораздо больший стол , что такое большой стол ? Каждый час, почему? Ваш вопрос должен быть в основном в 10 раз длиннее, чем в его фактическом состоянии, чтобы мы могли ответить на что-либо. Обновление 40 миллионов строк — это обычная работа для любой СУБД, работающей на приличном оборудовании. Однако правильно ли это делать и как это правильно делать, являются реальными вопросами и не подлежат ответу в фактическом состоянии вопроса.

Ответ №1:

Синтаксис для этого был бы примерно таким:

 INSERT INTO much_larger_table (cols...)
  SELECT cols... FROM a_table
  WHERE ...conditions...;
 

(Я использую некоторые заполнители, потому что вы не описали свои таблицы.)

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

Конечно, на это потребуется время. Мы не можем предсказать, сколько времени это займет, потому что это зависит от множества факторов, специфичных для вашего сервера и ваших таблиц. Вполне возможно, что это займет больше часа между вашими запланированными задачами.

Риск заключается в том, что ВСТАВКА…Инструкция SELECT, подобная этой, блокирует строки по мере их чтения из исходной таблицы. Это означает, что ни один сеанс не может изменить эти строки и, возможно, даже не сможет вставить или обновить другие строки в этой таблице, в зависимости от блокировки пробелов.

Я говорю разработчикам в моей компании ограничить количество пакетов до 1000 строк на транзакцию. Это позволяет быстро завершить каждую транзакцию, уменьшает количество заблокированных строк и продолжительность блокировки, а также позволяет продолжить сборку мусора MySQL.

Комментарии:

1. Спасибо, это очень полезно знать