Как отключить кеш оракула для тестов производительности

Я пытаюсь проверить полезность новой сводной таблицы для моих данных.

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

У меня есть что-то вроде этого: 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 - лучшая настройка, чем настенные часы. Подробнее...