Какой максимальный размер temp_buffers может быть установлен в PostgreSQL?

Можно переформулировать ваш вопрос следующим образом: "Какие именно расходы памяти предусмотрены при установке параметра temp_buffers равным 8 МБ при наличии 100 максимальных соединений (max_connections) в PostgreSQL - общий объем памяти или память на каждое соединение?"
  • 18 февраля 2024 г. 18:38
Ответы на вопрос 2
При установке параметра temp_buffers равным 8 МБ в PostgreSQL, этот размер будет распределен между всеми активными соединениями. Таким образом, объем памяти, выделенный под temp_buffers, будет разделен на все соединения в соответствии с их потребностями. На память каждого отдельного соединения будет выделена только часть от общего объема temp_buffers. 

Установка параметра temp_buffers равным 8 МБ не означает, что каждое соединение будет иметь доступ к 8 МБ выделенной памяти. Вместо этого эти 8 МБ будут распределены между всеми соединениями в соответствии с запросами и текущей нагрузкой на сервер. 

Кроме того, стоит учитывать, что параметр temp_buffers используется для временного хранения промежуточных результатов запросов, так что его размер должен быть выбран с учетом общего объема доступной памяти на сервере и типичных запросов, выполняемых на сервере.
Максимум INT_MAX / 2 числа блоков, что при обычном размере блока в 8кб будет равняться лимиту до 8TiB. 
melkij=> set temp_buffers to '8192GB';
ERROR:  1073741824 8kB is outside the valid range for parameter "temp_buffers" (100 .. 1073741823)
melkij=> set temp_buffers to '8191GB';
SET


Действует независимо для каждого процесса базы. При max_connection = 100 каждый из этих 100 процессов имеет возможность выделить по столько памяти для хранения блоков временных таблиц этой сессии.
Похожие вопросы