Automatic Table Caching, параметр инициализации STATISTICS_LEVEL, хинт CACHE

dbstalker, 22 мая

Начиная с Oracle9i Release 2, введено автоматическое кэширование небольших таблиц. Что это значит?

Это значит, что блоки данных этих таблиц при прочтении сразу же помещаются в горячий конец спиcка LRU буферного кеша. Маленькие таблицы (количество блоков <20 или 2% от всех кэшированных блоков) кэшируются всегда. По средним таблицам (больше 20 блоков и меньше 10% от общего числа кэшированных блоков) оракл принимает решение исходя из истории сканирования этой таблицы и нагрузки. Прочие таблицы не подвержены автоматическому кэшированию ни при каких условиях.

Для того, чтобы оракл принял адекватное решение по поводу кэширования таблицы необходимо установить значение параметра инициализации STATISTICS_LEVEL в значение TYPICAL (типовой) или ALL (все).

На заметку:

Все консультативные справки, включая консультативную справку по кешу буферов, и сбор статистических данных в СУБД Oracle9i Release 2 управляются с помощью одного параметра STATISTICS_LEVEL (уровень сбора статистических данных). У него может быть три возможных значения: BASIC (базовый), TYPICAL (типовой) и ALL (все). Значение по умолчанию – TYPICAL. Значения TYPICAL и ALL позволяют включать в сервере механизмы создания консультативных справок: Buffer Cache Advisory (кеш буферов), Shared Pool Advisory (разделяемый пул), PGA Advisory (программная глобальная область) и MTTR Advisory (ожидаемое среднее время восстановления). При этом оказывается незначительное влияние на производительность, связанное со сбором данных и моделированием кеша. Однако выгоды от надлежащим образом настроенной памяти намного перевешивают эти накладные расходы.

Но есть возможность взять власть в свои руки. Можно дать конкретную инструкцию (CACHE) оптимизатору для размещения блоков извлеченных из таблицы в горячий конец списка LRU буферного кэша, когда выполняется полное сканирование таблицы (FTS – full table scan). Обычно этот механизм используется для небольших таблиц. Пример:

SELECT /*+ FULL (etalon.table1) CACHE(etalon.table1) */ * FROM etalon.table1;

Применение хинта NOCACHE вызывает противоположное действие – размещает блоки таблицы в холодном конце LRU очереди.

Также есть возможность опции CACHE и NOCACHE устанавливать при создании или изменении таблицы (CREATE TABLE, ALTER TABLE). Действие этих установок анологично использованию хинтов.

Документация

2 комментария

Прокоментировать

Anonymous
10 июня 2008 г. в 14:47

Спасибо, хороший совет.
Успехов.

Gulya
5 ноября 2009 г. в 08:02

спасибо!!!

 

Новый комментарий

Я не спамер: введите суму 1+0



 

От авторов блога

О Блоге - прочитай перед началом.

Задать вопрос и получить ответ - уже решено 94 вопросов

Глоссарий - список терминов и сокращений


 
 

Бизнес форум

Последние темы:

Расписание автобусов
18 июля, 3 ответа
Отдых в августе
17 июля, 4 ответа