Как оценить правильное значение переменной innodb_records_in_range mysql 5.7.28-31? - PullRequest
1 голос
/ 24 января 2020

Мы установили последний 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 минорную версию, или можно установить правильные значения?

...