Задать вопрос

Как оптимизировать большую таблицу mysql, у которой очень много update/insert встают в очередь?

Есть таблица логов которая обрабатывает в час 67,080 запросов (90% UPDATE, 10% INSERT). Постоянное обновление информации раз в несколько минут.

Тип таблицы: MyISAM
Записей на данный момент 21,595,014 (будет расти).

Все жутко тормозит из-за того что много UPDATE запросов висят в очереди и SELECT ждет пока они обработаются. Оптимизированный запрос к БД может обрабатываться за 0.001 сек, либо за 300 сек, если идет обновление данных (а оно происходит довольно часто).

Вопросов у меня два:
1. Поможет ли переход на движок InnoDB и как его лучше произвести? Alter table сколько примерно будет обрабатываться на таком кол-ве записей?

2. Какие другие методы есть для подобной ситуации, все UPDATE и INSERT запросы вносят изменения в текущие данные (за сегодняшний день) и не трогают прошлые. Есть ли какая-то методика переноса записей в архив из активной таблицы раз в сутки или раз в час? Может кто-то подсказать правильный путь, как поступить?

Заранее спасибо.
  • Вопрос задан
  • 5175 просмотров
Подписаться 4 Оценить Комментировать
Решения вопроса 1
Kerman
@Kerman
1. Поможет. InnoDB при Update блокирует запись, а не таблицу целиком, как MyISAM. Alter Table будет пересоздавать таблицу, так что это будет обрабатываться долго.
2. В другую таблицу вынести можно. И ночью делать INSERT INTO Archive SELECT * FROM Dayly; DELETE FROM Dayly;
Но это не поможет без смены движка.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@shagguboy
есть вариант написать всем апдейтам LOW_PRIORITY
либо запустить сервер с параметром --low-priority-updates
dev.mysql.com/doc/refman/5.5/en/server-options.htm...
Ответ написан
Комментировать
Добрый день.
Можно разгрузить базу таким образом:
При апдейте, или инсерте, вместо того, чтобы писать в базу, пишем в файл, с меткой, например:
i|значение1|значение2
u|значение1|значение2

И каждые несколько минут кроном лочить файл, загружать данные, очищать, а потом разбирать данные (пара explode) и генерировать запросы с массовым INSERT (что тоже в разы ускорит их вставку), и UPDATE.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
26 дек. 2024, в 23:03
500 руб./в час
26 дек. 2024, в 21:50
5000 руб./за проект
26 дек. 2024, в 21:01
10000 руб./за проект