Запускайте 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).