Мы установили последний Percona MySQL сервер v5.7.28-31 , который устанавливается через Percona Repo.
После успешной миграции данных и нескольких дней работы мы столкнулись с проблемой низкой производительности и высокой загрузки дискового ввода-вывода.
Я попытался найти какое-либо решение и обнаружил эту известную проблему :
Увеличено время и ресурсы, необходимые для выполнения запроса MySQL с большим количеством разделов таблицы. Ограничение оценки записей в запросе описывает экспериментальные опции, добавленные для предотвращения сканирования индекса на разделах и возврата указанного количества значений.
Решение состоит в том, чтобы изменить значение innodb_records_in_range
и innodb_force_index_records_in_range
переменных. Но я не могу понять, какие правильные значения должны быть установлены там.
Как я понимаю, эти две являются количеством строк, которые будут проверяться во время запроса, но что оптимизатор mysql сделает после сканирования этих строк ? Будет ли он использовать индексы, которые следует использовать как верный путь, или он будет игнорировать любые индексы и просто сканировать эти строки и возвращать неверный вывод? Пожалуйста, помогите мне понять эти две переменные.
PS: ЕСЛИ я проверяю запрос через EXLPAIN на сервере, я вижу этот правильный лог c, и он использует необходимые индексы. Но на том же сервере с mysql 5.7.28-31 в случайное время мы видим этот неверный лог c, и он не использует требуемые индексы, и здесь наш сервер БД работает почти down.
PPS: мы не можем изменить запрос, потому что на других серверах у нас нет проблем, установлено mysql 5.7.23. Действительно ли необходимо понизить mysql минорную версию, или можно установить правильные значения?