Сбор статистики и кеш.

Шатёркин
Дата: 27.11.2009 14:48:42
Всем привет.

Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
PL/SQL Release 10.2.0.4.0 - Production
CORE 10.2.0.4.0 Production
TNS for Linux: Version 10.2.0.4.0 - Production
NLSRTL Version 10.2.0.4.0 - Production

Столкнулся со следующей бедой:
Есть пустая таблица.
Выполняю тестовый запрос.
Он имеет план №1.
После массовой вставки данных в таблицы я собираю статистику путём "DBMS_STATS.GATHER_SCHEMA_STATS"

Но запрос продолжает выполняться с планом №1 и зависает (>30 минут).
Заставить Оракл придумать новый план (№2) получилось только 2-мя способами:
способ 1 - "alter session set sql_trace = true;", но если сделать "alter session set sql_trace = false;" Оракл попять использует план №1. Зараза.
способ 2 - "ALTER TABLE ... SHRINK SPACE;" эта штука вытесняет план №1 уже навсегда и запрос отрабатывает за 2 сек.

Я был уверен, что любые операции с таблицей типа добавить колонку, собрать статистику, перестроить индекс и т.п. выкинут из кеша все планы, связанные с этой таблицей :(

Внимание вопрос - то что сбор статистики не чистит кеш запросов - это баг или фича?

Заранее спасибо.
tru55
Дата: 27.11.2009 14:56:31
PL/SQL Packages and Types Reference

DBMS_STATS.GATHER_TABLE_STATS (
.........
no_invalidate
........
)

no_invalidate
Does not invalidate the dependent cursors if set to TRUE.
The procedure invalidates the dependent cursors immediately if set to FALSE
Шатёркин
Дата: 27.11.2009 15:19:51
tru55,

Спасибо, попробую. Но это для таблицы :( Для всей схемы такого параметра нет.
Сенкс ещё раз. Проверяю.
Шатёркин
Дата: 27.11.2009 15:40:39
tru55,

Спасибо. Заработало!