Я пытаюсь вставить около 500 миллионов строк данных мусора в базу данных для тестирования. Прямо сейчас у меня есть PHP-скрипт, охватывающий несколько операторов SELECT/INSERT
, каждый из которых находится внутри TRANSACTION
- очевидно, это не лучшее решение. Столами являются InnoDB (блокировка на уровне строк).Вилка MySQL INSERT INTO (InnoDB)
Мне интересно, если я (правильно) разветвит процесс, это ускорит процесс INSERT
? По курсу это займет 140 часов. Я беспокоюсь о двух вещах:
Если
INSERT
операторы должны получить блокировку записи, то он будет оказывать разветвление бесполезно, поскольку несколько процессов не могут писать на ту же таблицу в то же время?Я использую
SELECT...LAST_INSERT_ID()
(внутри aTRANSACTION
). Будет ли эта логика нарушаться, если в базу данных входит несколько процессов:INSERT
? Я мог бы создать новое соединение с базой данных для каждой вилки, поэтому я надеюсь, что это позволит избежать проблемы.Сколько процессов я должен использовать? Сами запросы просты, и у меня есть обычный двухъядерный бокс с 2 ГБ оперативной памяти. Я установил свой InnoDB для использования 8 потоков (
innodb_thread_concurrency=8
), но я не уверен, должен ли я использовать 8 процессов или если это даже правильный способ подумать о совпадении.
Благодарим за помощь!
Спасибо за подробный ответ! Рад узнать, что не вызывает большого беспокойства. – ash