2010-01-27 3 views
28

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

alter system flush buffer_cache; 
alter system flush shared_pool; 

есть еще я должен делать, или это достаточно?

Спасибо!

ответ

7

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

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

+0

Вау, это отличная ссылка с очень хорошей информацией. Спасибо, что поделился! –

3

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

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

или

begin 
    dbms_stats.gather_database_stats; 
end; 

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

4

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

+1

Да, это определенно то, о чем я думал, когда запросы выполняются быстрее обычного, даже после очистки буферного кеша. Спасибо за совет! –

1

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

Смежные вопросы