Запускайте DB2 Runstats без активности, но все равно получите SQLSTATE = 01650 - PullRequest
0 голосов
/ 20 декабря 2018

Прочитав много статей из интернета, я все еще не уверен, какова реальная цель DB2 Runstats.

Насколько я понимаю, DB2 Runstats "зарегистрирует" индекс таблицы в DB2каталог, так что в следующий раз при выполнении соответствующего запроса он будет использовать индекс для повышения производительности.(Пожалуйста, исправьте меня, если я ошибаюсь)

То есть, если в течение длительного времени DB2 Runstats не запускается, индекс будет удален из каталога DB2?

Ясоздание нового индекса для таблицы.Первоначально эта таблица уже содержала другой индекс.

После создания нового индекса я запустил DB2 Runstats в таблице для старого индекса, но столкнулся со следующей ошибкой:

SQL2314W Некоторые статистические данные находятся в противоречивом состоянии.Вновь собранная статистика "INDEX" не соответствует существующей статистике "TABLE".SQLSTATE=01650

Сначала я подумал, что причиной действия является создание нового индекса, и таблица все еще находилась в стадии "обработки".Я снова набрал команду DB2 Runstats на следующий день, но все равно получил ту же ошибку.

1 Ответ

0 голосов
/ 20 декабря 2018

Ваше понимание о runstats db2 неверно.Эта команда собирает статистику по данной таблице и ее индексам и помещает ее в представления в схеме SYSSTAT, такие как SYSSTAT.TABLES , SYSSTAT.INDEXES и т. Д. Эта информация используется DB2оптимизатор для создания более качественных планов доступа к вашим запросам.Он не «регистрирует» индексы сам по себе.Индексы не удаляются автоматически, если вы не собираете статистику по ним.

Что касается предупреждающего сообщения SQL2314W.

Это просто предупреждение о том, что статистика таблиц и индексов не является логически совместимой (например, число ключей индекса больше, чем количество строк в таблице).Иногда это происходит, когда вы собираете статистику по активно обновляемой таблице одновременно, даже если вы запускаете такую ​​коллекцию для таблицы и ее индексов с помощью одной команды RUNSTATS.Вы можете либо проигнорировать это сообщение, либо заставить утилиту RUNSTATS заблокировать таблицу во время сбора статистики по таблице и ее индексам с помощью одной команды (предложение ALLOW READ ACCESS).

...