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

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

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

Я получил что-то вроде этого: 1199,84,81,81,81,81,82,80,80,81,81,80,81,91,80,80,81,80

Вероятно, моя Oracle 10 г делает несоответствующее кэширование.

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

16
задан APC 2 February 2010 в 17:52
поделиться

2 ответа

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

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

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

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

ALTER SYSTEM FLUSH BUFFER_CACHE;

, но снова только в тестовой среде.

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

10
ответ дан 30 November 2019 в 22:43
поделиться

Не уверен, есть ли общедоступный/документированный способ сделать это (есть некоторые внутренние функции git, которые вы можете использовать/злоупотреблять в самом источнике git)

Вы могли бы сделать что-то подобное;

if ! git ls-files >& /dev/null; then
  echo "not in git"
fi
-121--672223-

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

hr { width:75%; height:1px; background-color:#ebebeb; border:none; margin:1.5em auto; }

(подстроиться под костюм)

-121--2921290-

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

На самом деле кажется, что Oracle делает совершенно подходящее кэширование. Если эти таблицы будут использоваться много, то вы надеетесь, что они будут в кэше большую часть времени.

edit

В комментарии к ответу Питера Луис сказал, что

flushing перед звонком я получил некоторые интересные результаты, такие как: 1370,354,391,375,352,511,390,375,326,335,435,334,334,328,337,314,417,377,384,367,393.

Эти выводы «интересны», потому что сброс означает, что вызовы занимают немного больше времени, чем когда строки находятся в кэше БД, но не так долго, как первый вызов. Это почти наверняка связано с тем, что сервер сохранил физические записи в своем физическом кэше. Единственный способ избежать этого для истинного запуска с пустым кэшем - перезагрузить сервер перед каждым тестом.

Также можно научиться правильно настраивать запросы. Понимание работы базы данных является хорошим началом. И ОБЪЯСНИТЕ ПЛАН - это лучшее средство настройки, чем настенные часы. Подробнее.

6
ответ дан 30 November 2019 в 22:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: