17.8.10.2 Настройка параметров статистики оптимизатора без сохранения в базе данных
В этом разделе описывается, как настроить статистику оптимизатора без сохранения в базе данных. Статистика оптимизатора не сохраняется на диск, когда innodb_stats_persistent=OFF или когда отдельные таблицы создаются или изменяются с помощью STATS_PERSISTENT=0. Вместо этого статистика хранится в оперативной памяти и теряется при выключении сервера. Статистика также периодически обновляется некоторыми операциями и при определенных условиях.
По умолчанию статистика оптимизатора сохраняется на диск, что включено параметром конфигурации innodb_stats_persistent. Дополнительную информацию о статистике оптимизатора, сохраняемой в базе данных, см. в Разделе 17.8.10.1, «Настройка параметров статистики оптимизатора, сохраняемой в базе данных».
Обновление статистики оптимизатора
Статистика оптимизатора без сохранения в базе данных обновляется при:
Выполнении
ANALYZE TABLE.-
Выполнении
SHOW TABLE STATUS,SHOW INDEXили запросе к таблицам Информационной схемыTABLESилиSTATISTICSс включенным параметромinnodb_stats_on_metadata.Значение по умолчанию для
innodb_stats_on_metadataравноOFF. Включениеinnodb_stats_on_metadataможет снизить скорость доступа к схемам с большим количеством таблиц или индексов, а также снизить стабильность планов выполнения запросов, которые включаютInnoDBтаблиц.innodb_stats_on_metadataнастраивается глобально с помощью оператораSET.SET GLOBAL innodb_stats_on_metadata=ON
Примечаниеinnodb_stats_on_metadataприменяется только тогда, когда статистика оптимизатора настроена на не сохранение в базе данных (когдаinnodb_stats_persistentотключен). -
Запуск клиента mysql с включенным параметром
--auto-rehash, что является значением по умолчанию. Параметрauto-rehashприводит к открытию всехInnoDBтаблиц, а операции открытия таблиц приводят к перерасчёту статистики.Для повышения времени запуска клиента mysql и обновления статистики можно отключить
auto-rehashс помощью опции--disable-auto-rehash. Функцияauto-rehashпозволяет автоматически завершать ввод имен баз данных, таблиц и столбцов для интерактивных пользователей. Таблица открывается впервые.
InnoDBобнаруживает, что 1/16 таблицы была изменена с момента последнего обновления статистики.
Настройка количества выборочных страниц
Оптимизатор запросов MySQL использует приблизительные оценки распределения ключей для выбора индексов в плане выполнения, основываясь на относительной частоте использования индекса. При обновлении оптимизатором статистики InnoDB он выбирает случайные страницы из каждого индекса в таблице, чтобы оценить частоту использования индекса. (Этот метод известен как ...)
Чтобы контролировать качество оценки статистики (и, таким образом, получить лучшую информацию для оптимизатора запросов), вы можете изменить количество выборочных страниц, используя параметр innodb_stats_transient_sample_pages. По умолчанию используется 8 выборочных страниц, что может быть недостаточно для получения точной оценки, что приводит к неправильному выбору индексов оптимизатором запросов. Этот метод особенно важен для больших таблиц и таблиц, используемых в ... Необходимые ... для таких таблиц могут быть существенной проблемой производительности. См. Раздел 10.2.1.23, «Избегание полных сканирований таблиц» для советов по настройке таких запросов. innodb_stats_transient_sample_pages — глобальный параметр, который можно установить во время выполнения.
Значение innodb_stats_transient_sample_pages влияет на выборку индексов для всех InnoDB таблиц и индексов, когда innodb_stats_persistent=0. Обратите внимание на следующие потенциально значимые последствия при изменении размера выборки индексов:
Малые значения, такие как 1 или 2, могут привести к неточным оценкам кардинальности.
Увеличение значения
innodb_stats_transient_sample_pagesможет потребовать больше операций чтения с диска. Значения намного больше 8 (скажем, 100) могут значительно замедлить время открытия таблицы или выполненияSHOW TABLE STATUS.Оптимизатор может выбрать совершенно другие планы запросов на основе различных оценок селективности индекса.
Какое бы значение innodb_stats_transient_sample_pages ни было оптимальным для вашей системы, установите его и оставьте в таком состоянии. Выберите значение, которое обеспечивает достаточно точные оценки для всех таблиц в вашей базе данных без чрезмерного использования ввода-вывода. Поскольку статистика автоматически пересчитывается в разное время, а не при выполнении ANALYZE TABLE, нет смысла увеличивать размер выборки индекса, выполнять ANALYZE TABLE, а затем снова уменьшать размер выборки.
Для меньших таблиц обычно требуется меньше выборок индексов, чем для больших таблиц. Если ваша база данных содержит много больших таблиц, рассмотрите возможность использования большего значения для innodb_stats_transient_sample_pages, чем если бы у вас было много меньших таблиц.
© 2025 Oracle
Licensed under the GPLv2 License.