MySQL Мастер и раб с совершенно разными планами исполнения

StackOverflow https://stackoverflow.com/questions/1909653

  •  19-09-2019
  •  | 
  •  

Вопрос

У меня есть сложный запрос MySQL, который присоединяется к трем таблицам и самостоятельному делу на одну таблицу к себе.

Есть мастер и раб, которые имеют идентичные данные и индексы. Мастер является мощной коробкой по сравнению с рабом, но запрос работает в 10 раз быстрее на рабе (в течение периода легкой нагрузки для мастера).

Планы исполнения сильно разные.

Master execution plan
1, 'SIMPLE', 'table3_', 'const', 'PRIMARY', 'PRIMARY', '12', 'const', 1, 100.00, 'Using temporary; Using filesort'
1, 'SIMPLE', 'table2_', 'ref', 'PRIMARY,FK376E02E910238FCA', 'FK376E02E910238FCA', '13', 'const', 105, 100.00, 'Using where'
1, 'SIMPLE', 'table0_', 'ref', 'FK57012F937DD0DC02,FK57012F9398CD28D0', 'FK57012F9398CD28D0', '13', 'table2_.ID', 1515, 100.00, 'Using where'
1, 'SIMPLE', 'table1_', 'eq_ref', 'PRIMARY,FKE7E81F1ED170D4C9', 'PRIMARY', '8', 'table0_.FK_ID', 1, 100.00, 'Using where'

Slave execution plan
1, 'SIMPLE', 'table3_', 'const', 'PRIMARY', 'PRIMARY', '12', 'const', 1, 100.00, 'Using filesort'
1, 'SIMPLE', 'table1_', 'ref', 'PRIMARY,FKE7E81F1ED170D4C9', 'FKE7E81F1ED170D4C9', '9', 'const', 187398, 100.00, 'Using where'
1, 'SIMPLE', 'table0_', 'ref', 'FK57012F937DD0DC02,FK57012F9398CD28D0', 'FK57012F937DD0DC02', '9', 'table1_.ID', 1, 100.00, 'Using where'
1, 'SIMPLE', 'table2_', 'eq_ref', 'PRIMARY,FK376E02E910238FCA', 'PRIMARY', '12', 'table0_.FK_ID', 1, 100.00, 'Using where'

Таблицы обрабатываются в разных заказах, а в мастер -БД используется как временный таблица, так и файл, в то время как в рамках используется только файл.

Какие факторы могут вызвать различные планы с таким совершенно другим временем исполнения?

ОБНОВИТЬ:

Возможно ли это связано со статистикой индекса? Я планирую запустить таблицу анализа на мастере в течение периода малого объема. Показать индекс показывает очень разные кардинальности для некоторых ключей между мастером и рабом.

Это было полезно?

Решение

MySQL оптимизирует запросы на основе собранной статистики.

Глядя на ваш вывод, вы видите, что они используют разные клавиши, вам, возможно, придется добавить подсказки с ключами или даже ключи от силы

Из таблицы 2_ присоединения

должен стать

Из Table2_ Использовать ключ ('FK376E02E910238FCA') Присоединение

Или Force Key

Другие советы

Для меня это похоже на ошибку в оптимизаторе запроса. я бы доложите об этом.

Оба сервера на одной и той же версии MySQL?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top