Я настраиваю SQL-запросы на базе данных Oracle. Я хочу удостовериться, что все кэшируемые элементы очищены прежде, чем выполнить каждый запрос для предотвращения вводящих в заблуждение результатов проверки производительности. Я убираю общий пул (для избавлений от кэшируемых планов SQL/объяснять) и кэш-буфер (для избавлений от кэшированных данных) путем выполнения следующих команд:
alter system flush buffer_cache;
alter system flush shared_pool;
Есть ли больше, я должен делать, или действительно ли это достаточно?
Спасибо!
Промывка общего пула должно сделать это, но Том Китай перечисляет пару причин ниже, почему вы не можете получить результат, который вы ожидаете в некоторых случаях:
http://asktom.orcle.com/pls/asktom/ F? P = 100: 11: 0 :::: p11_question_id: 6349391411093
Вы также должны собирать статистику - либо для ваших схем, либо даже целых базы данных:
begin
dbms_stats.gather_schema_stats('schema_name');
end;
или
begin
dbms_stats.gather_database_stats;
end;
, а затем очистить общее пул.
Имейте в виду, что операционная система и аппаратное обеспечение также делают кэширование, которое может перекосить ваши результаты.