Прочитав множество статей в Интернете, я все еще не уверен, какова настоящая цель DB2 Runstats.
Насколько я понимаю, DB2 Runstats «зарегистрирует» индекс таблицы в каталоге DB2, так что в следующий раз, когда будет запущен связанный запрос, он будет использовать индекс для повышения производительности. (Пожалуйста, поправьте меня, если я ошибаюсь)
То есть, если DB2 Runstats не запускается долгое время, индекс будет удален из каталога DB2?
Я создаю новый индекс для таблицы. Первоначально эта таблица уже содержала другой индекс.
После создания нового индекса я запустил DB2 Runstats в таблице для старого индекса, но обнаружил следующую ошибку:
SQL2314WSome statistics are in an inconsistent state. The newly collected "INDEX" statistics are inconsistent with the existing "TABLE" statistics.SQLSTATE=01650
Сначала я подумал, что это вызвано действием по созданию нового индекса, а таблица все еще находилась в стадии «обработки». На следующий день я снова выполнил команду DB2 Runstats, но все равно получил ту же ошибку.


Ваше понимание db2 runstats неверно. Эта команда собирает статистику по данной таблице и ее индексам и помещает ее в представления схемы SYSSTAT, такие как SYSSTAT.TABLES, SYSSTAT.INDEXES и т. д. Эта информация используется оптимизатором DB2 для создания лучших планов доступа ваших запросов. Сам он не «регистрирует» индексы. Индексы не удаляются автоматически, если вы не собираете по ним статистику.
Что касается предупреждающего сообщения SQL2314W.
Это просто предупреждение о том, что статистика таблицы и индекса логически несовместима (например, количество ключей индекса больше, чем количество строк в таблице). Иногда это происходит, когда вы собираете статистику по активно обновляемой таблице одновременно, даже если вы запускаете такой сбор для таблицы и ее индексов с помощью одной команды RUNSTATS. Вы можете проигнорировать это сообщение или заставить утилиту RUNSTATS блокировать таблицу во время сбора статистики по таблице и ее индексам с помощью одной команды (предложение ALLOW READ ACCESS).
db2 использует так называемый оптимизатор, основанный на затратах. Это означает, что на решение оптимизатора влияет не только наличие объектов базы данных (например, индексов), но и ранее собранные данные и статистика индексов. Поэтому, как правило, лучше иметь самую свежую статистику, чтобы помочь оптимизатору выбрать наиболее эффективный план доступа из всех возможных.
Если я проигнорирую предупреждающее сообщение, повлияет ли оно на мои запросы к таблице?
Это зависит от «размера несоответствия статистики».
Привет, @Mark Barinstein, могу я узнать, что означает несогласованность статистики? что мне делать, если я хочу избежать появления этого предупреждающего сообщения. Если я проигнорирую это, это означает, что сбор статистики завершился ошибкой, верно? В случае неудачи возникнут ли проблемы с таблицей?
@PanadolChong Пожалуйста, прочтите мой пост еще раз внимательно. Уже есть ответы на все ваши вопросы. Другими словами, я не знаю, как ответить на ваши вопросы.
Спасибо за объяснение. Хотел бы спросить о «улучшении планов доступа для ваших запросов». Применимо ли это также, когда приложение запрашивает базу данных? Если я не запустил команду runstats, будет ли действовать старый индекс? Если да, могу ли я узнать, чем отличается команда runstats от команды runstats. Прошу прощения, если задаю глупый вопрос.