Как сделать недействительным оператор SQL в области Oracle SQL, чтобы при сборе статистики создавался новый план - PullRequest
4 голосов
/ 06 июля 2011

У меня есть таблица и запрос (в пакете PL / SQL) для доступа к этой таблице.Статистические данные собираются еженедельно.

В таблице было выполнено большое обновление, в результате чего распределение данных по конкретному индексируемому столбцу существенно отличается.План запросов, используемый Oracle (который я вижу из v$sqlarea), является неоптимальным.Если я возьму explain plan для того же * запроса из SQL * Plus, вернется хороший план.

С тех пор я собрал статистику по таблице.Oracle по-прежнему использует план запроса, который был изначально разработан.v$sqlarea.last_load_time предполагает, что это был план, сгенерированный до генерации статистики.Я думал, что восстановление статистики приведет к аннулированию планов в кеше SQL.

Есть ли способ удалить только этот оператор из кеша SQL?

(* Не посимвольный, соответствуетв SQL-кэше то же самое, но то же утверждение).

Ответы [ 2 ]

5 голосов
/ 06 июля 2011

Если вы используете 10.2.0.4 или новее, вы сможете использовать пакет DBMS_SHARED_POOL для очистки одного курсора из общего пула .

1 голос
/ 18 июля 2011

Я обнаружил (при исследовании чего-то еще), что я должен был использовать

no_invalidate => FALSE

При сборе статистики звоните gather_table_stats. Это привело бы к немедленному аннулированию всех планов SQL, ссылающихся на таблицу.

Документы Oracle 1007 говорят:

Does not invalidate the dependent cursors if set to TRUE. The procedure 
invalidates the dependent cursors immediately if set to FALSE. Use
DBMS_STATS.AUTO_INVALIDATE. to have Oracle decide when to invalidate dependent
cursors. This is the default.

Значение по умолчанию AUTO_INVALIDATE, по-видимому, вызывает недействительность операторов SQL в течение следующих 5 часов. Это должно остановить огромное количество хард-анализов, если вы собираете статистику по множеству объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...