Как очистить все кэшированные элементы в Oracle - PullRequest
32 голосов
/ 27 января 2010

Я настраиваю SQL-запросы к базе данных Oracle. Я хочу убедиться, что все кэшированные элементы очищаются перед выполнением каждого запроса, чтобы предотвратить вводящие в заблуждение результаты производительности. Я очищаю общий пул (чтобы избавиться от кэшированных планов SQL / объяснения) и буферный кеш (чтобы избавиться от кэшированных данных), выполнив следующие команды:

alter system flush buffer_cache;
alter system flush shared_pool;

Должен ли я делать больше или этого достаточно?

Спасибо!

Ответы [ 4 ]

8 голосов
/ 27 января 2010

Очистка общего пула должна сделать это, но Том Кайт перечисляет несколько причин ниже, почему вы можете не получить ожидаемый результат в некоторых случаях:

http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:6349391411093

4 голосов
/ 27 января 2010

Имейте в виду, что операционная система и оборудование также выполняют кэширование, что может исказить ваши результаты.

3 голосов
/ 27 января 2010

Вы также должны собрать статистику - для ваших схем или даже для всей базы данных:

begin
   dbms_stats.gather_schema_stats('schema_name');
end;

или

begin
   dbms_stats.gather_database_stats;
end;

А затем очистите общий пул.

1 голос
/ 19 января 2017

Я бы сказал, что вы представляете ложный результат , потому что вы очистили все кэши. База данных в реальном мире, только когда-либо в таком состоянии раз в своей жизни. На самом деле, при тестировании производительности, как правило, принято выполнять запрос несколько раз, чтобы увидеть преимущества кэширования (и других оптимизаций).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...