Как отключить кеш оракула для тестов производительности
Я пытаюсь проверить полезность новой сводной таблицы для моих данных.
Итак, я создал две процедуры для извлечения данных определенного интервала, каждый из которых использует другой источник таблицы. Так что на моем консольном приложении С# я просто звоню так или иначе. Проблема начинается, когда я хочу повторить это несколько раз, чтобы иметь хорошую картину времени отклика.
У меня есть что-то вроде этого: 1199,84,81,81,81,81,82,80,80,81,81,80,81,91,80,80,81,80
Возможно, мой Oracle 10g делает неуместное кэширование.
Как я могу это решить?
Ответы
Ответ 1
РЕДАКТИРОВАТЬ: Смотрите этот поток на asktom, в котором описывается, как и почему не делать этого.
Если вы находитесь в тестовой среде, вы можете снова и снова вставлять свои табличные пространства в автономном режиме и онлайн:
ALTER TABLESPACE <tablespace_name> OFFLINE;
ALTER TABLESPACE <tablespace_name> ONLINE;
Или вы можете попробовать
ALTER SYSTEM FLUSH BUFFER_CACHE;
но снова только в тестовой среде.
Когда вы тестируете свою "настоящую" систему, время, которое вы получаете после первого вызова (с использованием кэшированных данных), может быть более интересным, так как у вас будут кэшированные данные. Вызовите процедуру дважды и учтите только результаты производительности, которые вы получите в последующих исполнениях.
Ответ 2
Возможно, мой Oracle 10g делает неправильное кэширование.
На самом деле кажется, что Oracle делает совершенно необходимое кэширование. Если эти таблицы будут использоваться много, вы бы надеялись, что они будут в кеше большую часть времени.
изменить
В комментарии к Питеру ответ Луис сказал
промывка перед вызовом у меня есть интересные результаты: 1370.354.391.375.352.511.390.375.326.335.435.334.334.328.337.314.417.377.384.367.393.
Эти результаты являются "интересными", потому что флеш означает, что вызовы занимают немного больше времени, чем когда строки находятся в кеше БД, но не до тех пор, пока первый вызов. Это почти наверняка, потому что сервер сохранил физические записи в своем физическом кеше. Единственный способ избежать этого - честно работать с пустым кешем - перезагрузить сервер перед каждым тестом.
Альтернативно научитесь правильно настраивать запросы. Понимание как работает база данных - это хорошее начало. И EXPLAIN PLAN - лучшая настройка, чем настенные часы. Подробнее...