Как ускорить выполнение запроса?

Приветствую, подскажите кто знает.

Есть таблица myisam на 3000 записей (400 кб), периодически возникает необходимость обновить записи в таблице.
Обновляются пачками по макс 100 записей через
INSERT INTO `table` (id, field_varchar, field_int) VALUES (...)
ON DUPLICATE KEY UPDATE field_varchar=VALUES(field_varchar), field_int=VALUES(field_int)

Заметил, что если с интервалом 0.5-1 сек отправляются запросы, то примерно каждый третий запрос выполняется 3-5 сек, что очень долго, при этом остальные запросы доли секунды.

Знаю вариант, как реализовать через memcache, но все же хочется разобраться почему так происходит и как ускорить выполнение.
  • Вопрос задан
  • 381 просмотр
Решения вопроса 2
mahoho
@mahoho
Full stack certified PHP developer.
Тормозит, потому что MyISAM делает table lock для каждого такого запроса. Используйте InnoDB.
Ответ написан
Immortal_pony
@Immortal_pony Куратор тега MySQL
Включайте slow query log и смотрите, какие конкретно запросы вызывают проблемы.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
MaxDukov
@MaxDukov
впишусь в проект как SRE/DevOps.
"Use INSERT DELAYED when you do not need to know when your data is written. This reduces the overall insertion impact because many rows can be written with a single disk write." может так попробовать?
Ответ написан
@lega
Смотрите какая у вас нагрузка на IO, возможно затык в этом (особенно если это сервер от Hetzner).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы