YandexDirect

01 августа 2018

Oracle 11.2.0.3 и событие direct path read

Недавно столкнулся с производительностью на одной из наших БД. Активные сессии показывали много событий с ожиданиями  direct path read. Ознакомивших с множеством статей, выяснилось что именно в версии 11.2.0.3 появился механизм, отвечающий за то, когда Oracle решает большая таблица или нет и по результатам этого либо читает таблицу с диска либо из буферного кэша. Соответственно разница во времени выполнения запросов в разы отличается.




Если у вас также множество событий с ожиданием direct path read, то для начала необходимо узнать какое значение у скрытого параметра _small_table_threshold таким запросом:


SELECT ksppinm, ksppstvl, ksppdesc FROM x$ksppi x, x$ksppsv y WHERE x.indx = y.indx and ksppinm LIKE '%_small_table_threshold%';


Полученное значение 33138*5 = 165690 и есть количество блоков, до которых Oracle решает что таблица "маленькая", иными словами, если у вас таблица больше чем 165690 блоков, то Oracle переключается на direct path read, иначе использует кэшированное чтение (через buffer cache SGA).

Самое простое решение:


SQL> alter system set "_small_table_threshold"=999999 scope=spfile;
System altered.
SQL> startup force

Комментариев нет:

Отправить комментарий

Общее·количество·просмотров·страницы