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