[MySql] Медленный INSERT
В общем есть таблица с 7-ю миллионами записей. Необходимо быстро вставлять в нее десяток записей. Как это лучше сделать и влияет ли на это движок таблицы?
Сейчас у меня таблица innodb и вставляет записи за несколько секунд. Хотелось бы это как-то ускорить... |
Ответ: [MySql] Медленный INSERT
Если есть доступ к my.ini смени эти параметры и рестартни:
Код:
innodb_buffer_pool_size = рам Попробуй сделать EXPAIN для такого INSERT запроса чтоб не ходить вокруг да около (ток мускуль 5.6) http://dev.mysql.com/doc/refman/5.6/en/explain.html Или профильнуть через SHOW PROFILES; после INSERT |
Ответ: [MySql] Медленный INSERT
Еще вставлять надо в одной транзакции. И чем меньше индексов тем быстрее будет.
|
Ответ: [MySql] Медленный INSERT
Спасибо, попробую!
|
Ответ: [MySql] Медленный INSERT
По настройкам стоит:
Код:
innodb_buffer_pool_size = 8388608000 MySql 5.5 установлен. |
Ответ: [MySql] Медленный INSERT
Для ускорения записи еще innodb_log_file_size увеличить нужно.
Если все равно нет, то можно шардить по нескольким таблицам. |
Ответ: [MySql] Медленный INSERT
В общем сменил настройки mysql, при задании innodb_log_file_size сервер не стартует, оставил значение по умолчанию. Не понятно в чем проблема, логи почему-то пустые постоянно.
|
Ответ: [MySql] Медленный INSERT
Судя по всему скорость инсерта записей ускорилась с нескольких секунд до десятков миллисекунд, спасибо всем за помощь!
|
Ответ: [MySql] Медленный INSERT
Если у тебя не реляционные данные там, то лучше использовать key,value хранилища, например Cassandra легко ставится, и справляется с одной огромной коллекцией на много лучше.
|
Ответ: [MySql] Медленный INSERT
реляционные, до key value пока не дорос наверное
|
Ответ: [MySql] Медленный INSERT
Цитата:
Если тебе нужно шустрый insert, но очень шустрый read не сильно критичен, то бери mongodb. Т.к. у него на много выше скорость insert'а, но ниже скорость read'а обычно. Плюс как уже подметил, если тебе индексы нужны для анализа, и анализ можно делать offline, то лучше не индексуй основную таблицу, а лишь когда делать оффлайн анализ скриптом индексируй отдельную таблицу с семплом анализируемых данных. |
Ответ: [MySql] Медленный INSERT
партицирование
|
Ответ: [MySql] Медленный INSERT
Цитата:
Следственно партицирование не решает write проблемы, и обычно используется при высокой read нагрузке и огромных объемах данных (100гб+). |
Ответ: [MySql] Медленный INSERT
Цитата:
Партицировать таблицу можно по дате (например, помесячно). При партицировании индекс становится тоже партицированным, что охренительно ускоряет insert. Если сейчас инсерт например 0.01, то при росте базы (это ведь таблица со статистикой, наверняка будет расти) время инсерта может сильно увеличиться и с этим уже ничего не поделаешь (только лишаться индексов или делить таблицу на несколько). А с партицированием будет обновляться только индекс соответствующей партиции (например, за месяц), что значит что даже через 10 лет инсерт будет примерно такой же как и сейчас (и при этом делить таблицу на несколько, или удалять из нее данные не надо) |
Ответ: [MySql] Медленный INSERT
Цитата:
Следственно если нафиг убрать индексы которые нужны только для обработки данных, это уже сильно ускоряет вставку. Тем более хранить в бд устаревающие статистические данные - смысла нету вообще, как говорилось выше их нужно аггрегировать периодически, чтобы не нужно было хранить устаревшие и не нужные данные. |
Часовой пояс GMT +4, время: 11:13. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot