Насколько я понимаю (после долгих поисков в интернете)...
1- Если компонент запроса (сортировка, объединение и т. д.) использует больше ОЗУ/памяти, чем моя настройка work_mem
или, общая память, используемая всеми текущими операциями на сервере, превышает доступную память ОС, запрос начнет запись на диск.
Это правда?
2- Postgres (и многие другие хорошие механизмы БД) используют много памяти для кэширования, поэтому запросы выполняются быстрее; следовательно, сервер должен указывать на низкий уровень свободной памяти, даже если сервер на самом деле не голодает памяти. Таким образом, низкий уровень свободной памяти на самом деле не указывает ни на что, кроме хорошего механизма БД и здорового использования.
Это правда?
3- Если и № 1, и № 2 выше верны, сохраняя все остальное содержимое, если я хочу, чтобы индикатор платы с параметром work_mem
был слишком низким или не хватало общей памяти ОС, я должен посмотреть, есть ли на сервере свободное место на диске. идет вниз?
Я правильно об этом думаю?
ссылки:
https://www.postgresql.org/docs/current/static/runtime-config-resource.html
http://patshaughnessy.net/2016/1/22/is-your-postgres-query-starved-for-memory
https://www.enterprisedb.com/monitor-cpu-and-memory-percentage-used-each-process-postgresqlppas-9
https://dba.stackexchange.com/questions/18484/tuning-postgresql-for-large-amounts-of-ram
Я знаю, что могу установить log_temp_files
и просмотреть отдельные временные файлы, чтобы настроить параметр work_mem
, но мне нужен общий показатель, который я мог бы использовать, чтобы определить, возможно work_mem
слишком низкое, прежде чем я начну копаться в поисках временных файлов. размеры файлов превышают мою настройку work_mem
.
У меня PostgreSQL 10.