MySQL пропускает значения auto_increment (продолжение)

Я хотел бы продолжить отличное обсуждение ниже, поскольку я все еще не понимаю, что происходит. Я использую Google Cloud MySQL

innodb_version 5.7.25 innodb_autoinc_lock_mode 1

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

Чтобы поэкспериментировать с этим материалом, я использовал 5 файлов CSV, которые загружал за один раз; Я отбрасывал таблицу и воссоздавал ее после каждого запуска экспериментальной партии. Я загружал все 5 файлов каждый раз в одном и том же порядке. Я пробовал разные структуры таблиц, разные данные.

В руководстве https://dev.mysql.com/doc/refman/8.0/en/innodb-auto-increment-handling.html говорит о режиме последовательной блокировки:

Этот режим блокировки гарантирует, что при наличии операторов INSERT, где количество строк неизвестно заранее (и где номера автоинкремента назначаются по мере выполнения оператора), все значения автоинкремента, назначенные любым «INSERT» -like »являются последовательными, и операции безопасны для репликации на основе операторов.

И я согласен, записи идут последовательно в одном загружаемом файле. Но между загрузками есть промежутки. Эти промежутки могут быть разными. Одна таблица пропускает 1 ключ каждый раз, затем на некоторое время перестает пропускать, а затем снова начинает пропускать. В другой таблице каждый раз пропускается 8 записей, что совпадает с количеством записей, которые я загружаю в первый CSV-файл, который увидела таблица.

Я не видел ни рифмы, ни причины пропущенного количества записей, но, что любопытно, точная последовательность пропуска происходила каждый раз, когда я повторно запускал свой экспериментальный пакет (так что это компьютер!)

Я прочитал предлагаемые решения (установите блокировку на старый 0; не используйте автоматическое приращение и т. Д.). Все в порядке, но я ДЕЙСТВИТЕЛЬНО хочу использовать автоматическое приращение, но эта непредсказуемость заставляет меня нервничать. Кто-нибудь знает

  1. Какой расчет производит движок, чтобы определить, сколько ключей нужно зарезервировать?
  2. Когда происходит это резервирование до начала загрузки?
  3. Являются ли данные загрузки более склонными к потере ключевых слов, чем, скажем, программа на Python?
  4. Есть ли способ повлиять на это бронирование с помощью информации, структуры таблицы?

Большое спасибо!

Источник: ledsshop.ru

Стиль жизни - Здоровье!