Иногда я запускаю запрос Postgres, это занимает 30 секунд. Затем я немедленно запускаю тот же запрос, и это занимает 2 секунды. Похоже, у Postgres есть какое-то кеширование. Могу я как-нибудь увидеть, что хранится в этом кеше? Могу ли я принудительно очистить все кеши для настройки?
Примечание: в основном я ищу версию postgres для следующей команды SQL Server:
DBCC FREEPROCCACHE
DBCC DROPCLEANBUFFERS
Но я также хотел бы знать, как увидеть, что на самом деле содержится в этом буфере.
Спасибо за любую помощь.
источник
Я не видел команд для очистки кешей в PostgreSQL. То, что вы видите, скорее всего, является обычным индексом и кешами данных, которые читаются с диска и хранятся в памяти. как postgresql, так и кеши в ОС. Единственный известный мне способ избавиться от всего этого:
Что вам следует сделать:
sudo service postgresql stop
,sudo systemctl stop postgresql
и т.д.)echo 3 > /proc/sys/vm/drop_caches
Это очистит кеши файлов / блоков ОС - это очень важно, хотя я не знаю, как это сделать в других ОС. (В случае отказа в разрешении попробуйте,sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"
как в этом вопросе )sudo service postgresql start
,sudo systemctl start postgresql
)источник
Ответ Грега Смита о drop_caches был очень полезным. Я счел необходимым остановить и запустить службу postgresql в дополнение к удалению кешей. Вот сценарий оболочки, который помогает. (Моя среда - Ubuntu 14.04 и PostgreSQL 9.3.)
#!/usr/bin/sudo bash service postgresql stop sync echo 3 > /proc/sys/vm/drop_caches service postgresql start
Я тестировал запрос, который в первый раз занял 19 секунд, а при последующих попытках - менее 2 секунд. После запуска этого скрипта запрос снова занял 19 секунд.
источник
Я использую эту команду в своем Linux-окне:
sync; /etc/init.d/postgresql-9.0 stop; echo 1 > /proc/sys/vm/drop_caches; /etc/init.d/postgresql-9.0 start
Полностью избавляется от кеша.
источник
postgresql
, что может быть не так.sync
должно быть сделано после остановки сервера, непосредственно перед темdrop_caches
, как Postgres может снова что-то написать во время процесса остановки.Да, в postgresql конечно есть кеширование. Размер контролируется настройкой shared_buffers . Помимо этого, как упоминалось в предыдущем ответе, также используется файловый кеш ОС.
Если вы хотите посмотреть, что находится в кеше, имеется доступный модуль contrib под названием pg_buffercache (в contrib / в дереве исходных текстов , в RPM contrib или в любом другом месте, в зависимости от способа его установки). Как его использовать, указано в стандартной документации PostgreSQL.
Нет других способов очистить буферный кеш, кроме перезапуска сервера. Вы можете удалить кеш ОС с помощью команды, упомянутой в другом ответе, при условии, что ваша ОС - Linux.
источник
У меня была такая ошибка.
Я искал промывку текущего плана и нашел следующее:
ПЛАН ОТКАЗА
У меня это было между вставками, и это решает мою проблему.
источник
DISCARD PLANS;
. И, как говорится в документации: «DISCARD освобождает внутренние ресурсы, связанные с сеансом базы данных ».Да, можно очистить как общие буферы Postgres кэш И кэш ОС. Нижеприведенное решение предназначено для Windows ... другие уже предоставили решение для Linux.
Как уже говорили многие, для очистки общих буферов вы можете просто перезапустить Postgres (перезапускать сервер не нужно). Но простое выполнение этого не очистит кеш ОС.
Чтобы очистить кеш ОС, используемый Postgres, после остановки службы используйте превосходный RamMap ( https://technet.microsoft.com/en-us/sysinternals/rammap ) из превосходного Sysinternals Suite. После того, как вы запустите RamMap, просто нажмите «Пустой» -> «Пустой резервный список» в главном меню.
Перезапустите Postgres, и вы увидите, что следующий запрос будет чертовски медленным из-за отсутствия кеша.
Вы также можете выполнить RamMap, не закрывая Postgres, и, вероятно, получите желаемый результат «без кеша», поскольку, как уже было сказано, общие буферы обычно не оказывают большого влияния по сравнению с кешем ОС. Но для надежного теста я бы предпочел остановить postgres как все, прежде чем очищать кеш ОС, чтобы убедиться.
Примечание: AFAIK, я не рекомендую очищать другие вещи, кроме «Резервного списка» при использовании RamMap, потому что другие данные каким-то образом используются, и вы можете потенциально вызвать проблемы / потерять данные, если вы это сделаете. Помните, что вы очищаете память, используемую не только файлами postgres, но и любыми другими приложениями и ОС.
С уважением, Тьяго Л.
источник
это мой ярлык
echo 1 > /proc/sys/vm/drop_caches; echo 2 > /proc/sys/vm/drop_caches; echo 3 > /proc/sys/vm/drop_caches; rcpostgresql stop; rcpostgresql start;
источник
Есть
pg_buffercache
модуль для просмотраshared_buffers
кеша. И в какой-то момент мне нужно было удалить кеш, чтобы провести некоторые тесты производительности на «холодном» кеше, поэтому я написал расширение pg_dropcache, которое делает именно это. Пожалуйста, проверьте это.источник