Почему PostgreSQL резервирует фиксированный объем памяти для текста текущей выполняемой команды? - PullRequest
2 голосов
/ 08 января 2020

Выдержка из документации :

track_activity_query_size (integer) Указывает объем памяти, зарезервированный для хранения текста текущей выполняемой команды для каждого активного сеанса, для pg_stat_activity .query поле. Если это значение указано без единиц измерения, оно принимается как байты. Значение по умолчанию составляет 1024 байта. Этот параметр может быть установлен только при запуске сервера.

Насколько я понимаю, это означает, что, если, например, track_activity_query_size установлен на 10 КБ, каждая сессия будет потреблять 10 КБ для текста текущего выполнение команды независимо от фактического размера текста.

Почему это реализовано таким образом? Было бы слишком медленно динамически распределять фактически необходимое количество?

1 Ответ

3 голосов
/ 08 января 2020

Этот параметр определяет, сколько памяти выделяется в структурах разделяемой памяти , которые содержат тексты запросов.

PostgreSQL выделяет такие области совместно используемой памяти при запуске сервера и не изменяет их размер позже , Это сделано для того, чтобы код (который должен работать во многих операционных системах) был простым и надежным. Когда вы знаете max_connections и track_activity_query_size, вы можете определить максимальный необходимый объем памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...