Наряду с привычным механизмом многоблочного чтения (событие ожидания db file scattered read) при непараллельном сканировании таблиц в Oracle 11g используется direct path read - 793845.1 High ‘direct path read’ waits in 11g:
“В версии 11g измененились модели выбора (heuristics) между direct path reads и операцией чтения блоков данных через буферный кэш при непараллельном сканировании таблиц (serial table scans).
В 10g, при сканировании больших таблиц использовался буферный кэш, что теперь не является единственным возможным вариантом…
В Oracle 11g выбор метода доступа между direct path и обычным чтением через кэш основывается на размере таблицы, db_cache_size, shared_pool_size и других параметрах.
Direct path reads быстрее, чем scattered reads и меньше влияет на другие процессы, т.к. исключается механизм latches.”
В Oracle 11g добавлено 10949 event для контроля использования direct path read, установка которого отключает использование этого механизма:
SQL> alter session set events '10949 trace name context forever, level 1';
Динамически определяемый (на основе значения параметра _db_block_buffers на момент старта инстанса) скрытый параметр _small_table_threshold определяет “порог переключения” между использованием буферного кэша и direct path read при сканировании больших таблиц: direct path read начинает использоваться для таблиц с размером больше _small_table_threshold*5 блоков БД (приблизительно – см. описание экспериментов Алекса Фаткулина)
Соответствующая статистика Oracle
physical reads direct
Перед операцией direct path read при необходимости производится fast object checkpoint (запись “грязных” блоков таблицы в файлы данных).
