Как отключить оракул кеш для тестов производительности - PullRequest
15 голосов
/ 01 февраля 2010

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

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

Я получил примерно так: 1199,84,81,81,81,81,82,80,80,81,81,80,81,91,80,80,81,80

Возможно, мой Oracle 10g делает неуместное кэширование.

Как я могу решить это?

Ответы [ 2 ]

10 голосов
/ 01 февраля 2010

РЕДАКТИРОВАТЬ: См. Эту ветку на asktom , которая описывает как и , почему бы не сделать это.

Если вы находитесь в тестовой среде, вы можете перевести свое табличное пространство в автономный режим и снова в оперативный режим:

ALTER TABLESPACE <tablespace_name> OFFLINE;
ALTER TABLESPACE <tablespace_name> ONLINE;

Или вы можете попробовать

ALTER SYSTEM FLUSH BUFFER_CACHE;

но опять-таки только в тестовой среде.

Когда вы тестируете в своей «реальной» системе, время, которое вы получаете после первого вызова (те, которые используют кэшированные данные), может быть более интересным, поскольку вы кэшируете данные. Вызовите процедуру дважды и учитывайте только результаты производительности, которые вы получите при последующих выполнениях.

6 голосов
/ 02 февраля 2010

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

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