привет всем! Пишу повторно. Отчасти вопрос решили, но остались непонятки.
Есть серьезно нагруженный проект.
Есть репликация (пишем в мастер, читаем со слейвов)
Есть 2 таблицы, в которые идет огромное количество записей и огромное количество инсертов и огромное кличество чтений (Task и TaskFlow2). Таблицы огромные.
И есть селект, с которым проблемы.
Индексы все сделаны.
SELECT
task.id,
task.remains
FROM
Task task
WHERE
task.status = 'active'
AND task.type = 'follow_profile'
AND task.provider = 'insta'
AND task.cat = 3
AND NOT EXISTS(
SELECT 1 FROM TaskFlow flow
WHERE
flow.url_id = task.url_id
AND flow.executor_acc_id = $acc
);
ORDER BY task.id ASC
LIMIT 300
Индексы:
Task ( status, type, provider, cat )
TaskFlow (executor_acc_id, url_id )
Суть: При количестве запросов селект и инсерт в них примерно 3000+ в секунду, все ок.
Как только количество переваливает за 4000+ начинает сильно расти нагрузка на процессоры слейвов, селекты начинают выполнятся с задержкой в статусе sending data и их копится огромное количество если смотреть по show processlist и начинает расти отставание между мастером и слейвом. Соответственно все тупит и работает некорректно.
Не прекращается пока не ограничить поступление запросов. Как только останавливаем инсерты и селекты, все за пару секунд возвращается в норму
Подскажите куда копать. Спасибо!
UPD: Если увеличивать LIMIT в выборке, нагрузка значительно возрастает.