Запускайте DB2 Runstats без активности, но все равно получите SQLSTATE=01650

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

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

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

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

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

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

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

1 ответ

Решение

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

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

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

Другие вопросы по тегам