Очистка кеша для бенчмаркинга в PostgreSQL 9.1 - PullRequest
2 голосов
/ 28 марта 2012

Я выполняю некоторые задачи тестирования производительности, используя Postgresql 9.1, работающий на Debian Linux. Я хотел бы сравнить рабочую нагрузку запросов, которые имеют общую часть. Перед выполнением каждого запроса я перезагружаю базу данных и выполняю следующую команду:

echo 3> / proc / sys / vm / drop_caches

с целью удаления как общей памяти, так и кэша ОС. Однако я заметил, что если я выполняю одну и ту же рабочую нагрузку запроса в другом порядке, я получаю разное время ответа на запрос. Я подозреваю, что каким-то образом либо оптимизатор запросов «помнит», как эффективно выполнять общие части запроса, либо повторно использует некоторые ранее кэшированные результаты.

У вас есть идеи, как обойти эту проблему? Я хотел бы получить примерно одинаковое время ответа независимо от порядка запросов. Обратите внимание, что я анализирую вывод EXPLAIN для извлечения фактического времени выполнения.

1 Ответ

1 голос
/ 03 апреля 2012

Первое, что приходит на ум, - это то, что autovacuum (фоновая задача обслуживания в PostgreSQL: http://www.postgresql.org/docs/current/interactive/routine-vacuuming.html#AUTOVACUUM) может выполнять некоторую работу, которая повторно заполняет ваш кэш трудно предсказуемыми способами.Вы можете отключить его, но имейте в виду, что это может привести к раздутию, плохой статистике, неправильному выбору плана и дополнительным нагрузкам на внешние процессы - поэтому это обычно не рекомендуется.Другим способом решения этой проблемы является запуск VACUUM FREEZE ANALYZE после загрузки ваших данных, чтобы перевести все в исправное состояние, остановить PostgreSQL, очистить кэш вашей ОС, а затем запустить и выполнить тест.

Другим возможным источником проблем могут быть контрольные точки;вы должны убедиться, что у вас достаточно высоко настроены контрольные точки, чтобы избежать частых принудительных контрольных точек, и вы должны рассмотреть параметр checkpoint_timeout с точки зрения того, когда контрольные точки появятся во время вашего теста.

Также возможно, что карта контроллера RAID илиЖесткий диск может быть достаточно кэширующим, чтобы иметь значение - я не знаю, очищает ли его очистка кэша ОС, но я сомневаюсь в этом.

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

...