Spec-Zone .ru
спецификации, руководства, описания, API

14.2.5.8. Управление Оценкой Статистики Оптимизатора

Оптимизатор запросов MySQL использует оцененную статистику о ключевых дистрибутивах, чтобы выбрать индексирование для плана выполнения, основанного на относительной селективности индексирования. Определенные операции заставляют InnoDB выбирать случайные страницы от каждого, индексируют на таблице, чтобы оценить количество элементов индексирования. (Этот метод известен как случайные погружения.) Эти операции включают ANALYZE TABLE оператор, SHOW TABLE STATUS оператор, и доступ к таблице впервые после перезапуска.

Чтобы дать Вам контроль над качеством оценки статистики (и таким образом лучшая информация для оптимизатора запросов), можно теперь изменить число выбранных страниц, используя параметр innodb_stats_sample_pages. Ранее, число выбранных страниц всегда было 8, который мог быть недостаточным, чтобы произвести точную оценку, приводя плохому индексирует варианты оптимизатором запросов. Этот метод особенно важен для больших таблиц и таблиц, используемых в соединениях. Ненужные полные сканирования таблицы на предмет таких таблиц могут быть существенной проблемой производительности. См. Раздел 8.2.1.4, "Как Избежать Полных Сканирований таблицы" на предмет подсказок относительно настройки таких запросов.

Можно установить глобальные параметры innodb_stats_sample_pages, во времени выполнения. Значение по умолчанию для этого параметра 8, сохраняя то же самое поведение как в прошлых выпусках.

Отметить

Значение innodb_stats_sample_pages влияет на индексировать выборку для всех таблиц InnoDB и индексирует. Есть следующее потенциально существенное влияние, когда Вы изменяете индексировать объем выборки:

  • Маленькие значения как 1 или 2 могут привести к очень неточным оценкам количества элементов.

  • Увеличение innodb_stats_sample_pages значение могло бы потребовать большего количества чтения с диска. Значения, намного больше чем 8 (говорят, 100), могут вызвать большое замедление во время, которое требуется, чтобы открыть таблицу или выполниться SHOW TABLE STATUS.

  • Оптимизатор мог бы выбрать, совсем другие планы запроса, основанные на различных оценках, индексируют селективность.

Отключить оценку количества элементов для операторов метаданных такой как SHOW TABLE STATUS, выполните оператор SET GLOBAL innodb_stats_on_metadata=OFF (или 0). Возможность установить эту опцию динамически также относительно нова.

Все таблицы InnoDB открываются, и статистические данные повторно оцениваются для всех связанных, индексирует, когда mysql клиент запускает, если установка автоперефразировки устанавливается на (значение по умолчанию). Чтобы улучшить время запуска mysql клиента, можно выключить автоперефразировку. Опция автоперефразировки позволяет автоматическому завершению имени базы данных, таблицы, и имен столбцов для интерактивных пользователей.

Безотносительно значения innodb_stats_sample_pages работы лучше всего для системы, набор опция и отпуск это в том значении. Выберите значение, которое приводит к разумно точным оценкам для всех таблиц в Вашей базе данных, не требуя чрезмерного ввода-вывода. Поскольку статистические данные автоматически повторно вычисляются неоднократно кроме на выполнении ANALYZE TABLE, это не имеет смысла увеличивать индексировать объем выборки, работать ANALYZE TABLE, тогда уменьшите объем выборки снова. Более точная статистика, вычисленная ANALYZE выполнение с высоким значением innodb_stats_sample_pages может быть вытерт позже.

Хотя не возможно определить объем выборки на основе на таблицу, меньшие таблицы обычно требуют, чтобы меньше индексировали выборки, чем большие таблицы. Если у Вашей базы данных есть много больших таблиц, рассмотрите использование более высокого значения для innodb_stats_sample_pages чем если бы у Вас есть главным образом меньшие таблицы.