Как улучшить производительность MySQL INSERT и UPDATE? - PullRequest
4 голосов
/ 03 марта 2010

Производительность операторов INSERT и UPDATE в нашей базе данных, похоже, ухудшается и приводит к снижению производительности нашего веб-приложения.

Таблицы InnoDB, и приложение использует транзакции. Есть ли какие-нибудь легкие настройки, которые я могу сделать, чтобы ускорить процесс?

Я думаю, что у нас могут быть проблемы с блокировкой, как я могу это выяснить?

Ответы [ 5 ]

3 голосов
/ 03 марта 2010
2 голосов
/ 03 марта 2010

INSERT и UPDATE становятся все медленнее, когда число строк в таблице с индексом увеличивается. Таблицы Innodb даже медленнее, чем таблицы MyISAM для вставок, и опция отложенной записи ключа недоступна.

Самый эффективный способ ускорить процесс - это сначала сохранить данные в плоский файл, а затем выполнить LOAD DATA, это примерно в 20 раз быстрее.

Второй вариант - создать временную таблицу в памяти, загрузить в нее данные, а затем выполнить INSERT INTO SELECT в пакетном режиме. То есть, когда у вас есть около 100 строк в вашей временной таблице, загрузите их в постоянную.

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

1 голос
/ 03 марта 2010

Я бы попробовал настроить таблицы на задержку обновления индекса.

ALTER TABLE {name} delay_key_write='1'
0 голосов
/ 03 марта 2010

Я бы не стал рассматривать блокировку / блокировку, если бы число одновременно работающих пользователей не увеличивалось с течением времени.

Если со временем производительность постепенно снижается, я бы посмотрел планы запросов с помощью оператора EXPLAIN.

Для сравнения было бы полезно получить их результаты из среды разработки или начальной производственной среды.

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

0 голосов
/ 03 марта 2010

Если вы не используете индексы, они могут помочь повысить производительность запросов на обновление.

...