|
PHP / MySQL Создание динамических Веб-ресурсов |
31.05.2015, 00:09
|
#1
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
[MySql] Медленный INSERT
В общем есть таблица с 7-ю миллионами записей. Необходимо быстро вставлять в нее десяток записей. Как это лучше сделать и влияет ли на это движок таблицы?
Сейчас у меня таблица innodb и вставляет записи за несколько секунд. Хотелось бы это как-то ускорить...
|
(Offline)
|
|
31.05.2015, 01:24
|
#2
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,359
Написано 2,473 полезных сообщений (для 6,856 пользователей)
|
Ответ: [MySql] Медленный INSERT
Если есть доступ к my.ini смени эти параметры и рестартни:
innodb_buffer_pool_size = рам
innodb_read_io_threads = побольше потоков чтения
innodb_write_io_threads = побольше потоков записи
innodb_thread_concurrency = общее кол-во потоков
может имеет смысл врубить innodb_file_per_table
Попробуй сделать EXPAIN для такого INSERT запроса чтоб не ходить вокруг да около (ток мускуль 5.6)
http://dev.mysql.com/doc/refman/5.6/en/explain.html
Или профильнуть через SHOW PROFILES; после INSERT
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
31.05.2015, 11:23
|
#3
|
Бывалый
Регистрация: 19.06.2008
Сообщений: 679
Написано 264 полезных сообщений (для 450 пользователей)
|
Ответ: [MySql] Медленный INSERT
Еще вставлять надо в одной транзакции. И чем меньше индексов тем быстрее будет.
__________________
|
(Online)
|
|
Сообщение было полезно следующим пользователям:
|
|
31.05.2015, 15:07
|
#4
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: [MySql] Медленный INSERT
Спасибо, попробую!
|
(Offline)
|
|
31.05.2015, 15:12
|
#5
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: [MySql] Медленный INSERT
По настройкам стоит:
innodb_buffer_pool_size = 8388608000
innodb_read_io_threads = 4
innodb_write_io_threads = 4
innodb_thread_concurrency = 0
innodb_file_per_table = OFF
Что посоветуете при наличии процессора core i7 с восемью логическими ядрами?
MySql 5.5 установлен.
|
(Offline)
|
|
31.05.2015, 23:39
|
#6
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Ответ: [MySql] Медленный INSERT
Для ускорения записи еще innodb_log_file_size увеличить нужно.
Если все равно нет, то можно шардить по нескольким таблицам.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
01.06.2015, 16:55
|
#7
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: [MySql] Медленный INSERT
В общем сменил настройки mysql, при задании innodb_log_file_size сервер не стартует, оставил значение по умолчанию. Не понятно в чем проблема, логи почему-то пустые постоянно.
|
(Offline)
|
|
01.06.2015, 17:25
|
#8
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: [MySql] Медленный INSERT
Судя по всему скорость инсерта записей ускорилась с нескольких секунд до десятков миллисекунд, спасибо всем за помощь!
|
(Offline)
|
|
01.06.2015, 17:29
|
#9
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: [MySql] Медленный INSERT
Если у тебя не реляционные данные там, то лучше использовать key,value хранилища, например Cassandra легко ставится, и справляется с одной огромной коллекцией на много лучше.
|
(Offline)
|
|
01.06.2015, 18:02
|
#10
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: [MySql] Медленный INSERT
реляционные, до key value пока не дорос наверное
|
(Offline)
|
|
01.06.2015, 18:55
|
#11
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: [MySql] Медленный INSERT
Сообщение от pax
реляционные, до key value пока не дорос наверное
|
Там проще обычно.
Если тебе нужно шустрый insert, но очень шустрый read не сильно критичен, то бери mongodb. Т.к. у него на много выше скорость insert'а, но ниже скорость read'а обычно.
Плюс как уже подметил, если тебе индексы нужны для анализа, и анализ можно делать offline, то лучше не индексуй основную таблицу, а лишь когда делать оффлайн анализ скриптом индексируй отдельную таблицу с семплом анализируемых данных.
|
(Offline)
|
|
01.06.2015, 19:38
|
#12
|
Бывалый
Регистрация: 19.06.2008
Сообщений: 679
Написано 264 полезных сообщений (для 450 пользователей)
|
Ответ: [MySql] Медленный INSERT
партицирование
__________________
|
(Online)
|
|
02.06.2015, 13:21
|
#13
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: [MySql] Медленный INSERT
Сообщение от h1dd3n
партицирование
|
Это поможет только если партицировать по (id % partitions), но это очень ограничено и усложнит запросы к бд.
Следственно партицирование не решает write проблемы, и обычно используется при высокой read нагрузке и огромных объемах данных (100гб+).
|
(Offline)
|
|
02.06.2015, 13:51
|
#14
|
Бывалый
Регистрация: 19.06.2008
Сообщений: 679
Написано 264 полезных сообщений (для 450 пользователей)
|
Ответ: [MySql] Медленный INSERT
Сообщение от moka
Это поможет только если партицировать по (id % partitions), но это очень ограничено и усложнит запросы к бд.
Следственно партицирование не решает write проблемы, и обычно используется при высокой read нагрузке и огромных объемах данных (100гб+).
|
Что за бред. Я пониманию что тебе возможно трудно писать по-русски, но в твоем посте смысла просто 0...
Партицировать таблицу можно по дате (например, помесячно). При партицировании индекс становится тоже партицированным, что охренительно ускоряет insert. Если сейчас инсерт например 0.01, то при росте базы (это ведь таблица со статистикой, наверняка будет расти) время инсерта может сильно увеличиться и с этим уже ничего не поделаешь (только лишаться индексов или делить таблицу на несколько). А с партицированием будет обновляться только индекс соответствующей партиции (например, за месяц), что значит что даже через 10 лет инсерт будет примерно такой же как и сейчас (и при этом делить таблицу на несколько, или удалять из нее данные не надо)
__________________
|
(Online)
|
|
02.06.2015, 13:59
|
#15
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: [MySql] Медленный INSERT
Сообщение от h1dd3n
Что за бред. Я пониманию что тебе возможно трудно писать по-русски, но в твоем посте смысла просто 0...
Партицировать таблицу можно по дате (например, помесячно). При партицировании индекс становится тоже партицированным, что охренительно ускоряет insert. Если сейчас инсерт например 0.01, то при росте базы (это ведь таблица со статистикой, наверняка будет расти) время инсерта может сильно увеличиться и с этим уже ничего не поделаешь (только лишаться индексов или делить таблицу на несколько). А с партицированием будет обновляться только индекс соответствующей партиции (например, за месяц), что значит что даже через 10 лет инсерт будет примерно такой же как и сейчас (и при этом делить таблицу на несколько, или удалять из нее данные не надо)
|
Основная проблема скорости insert'а в данном случае связана не с размером таблицы, а со сложностью индексации на таблице + количество insert'ов в секунду, и работа требуемая на обработку данных даже до того как вставится в таблицу. И лишь потом уже фактор большой таблицы.
Следственно если нафиг убрать индексы которые нужны только для обработки данных, это уже сильно ускоряет вставку.
Тем более хранить в бд устаревающие статистические данные - смысла нету вообще, как говорилось выше их нужно аггрегировать периодически, чтобы не нужно было хранить устаревшие и не нужные данные.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 01:17.
|