53.4. pg_backend_memory_contexts #

В представлении pg_backend_memory_contexts показываются все контексты памяти серверного процесса, обслуживающего текущий сеанс.

Представление pg_backend_memory_contexts содержит одну строку для каждого контекста памяти.

Таблица 53.4. Столбцы pg_backend_memory_contexts

Тип столбца

Описание

name text

Имя контекста памяти

ident text

Информация для идентификации контекста памяти. Размер поля ограничен 1024 байтами

type text

Type of the memory context

level int4

Нумерованный (начиная с 1) уровень контекста в иерархии контекстов памяти. Уровень контекста также указывает на позицию данного контекста в столбце path.

path int4[]

Массив временных числовых идентификаторов, описывающий иерархию контекстов памяти. Первый элемент соответствует TopMemoryContext, последующие элементы содержат идентификаторы промежуточных родительских контекстов, а последний элемент содержит идентификатор текущего контекста.

total_bytes int8

Общий объём памяти, выделенный для данного контекста, в байтах

total_nblocks int8

Общее количество блоков памяти, выделенных для данного контекста

free_bytes int8

Объём свободного пространства в байтах

free_chunks int8

Общее количество свободных участков

used_bytes int8

Объём использованного пространства в байтах


По умолчанию представление pg_backend_memory_contexts могут читать только суперпользователи или пользователи c правами роли pg_read_all_stats.

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

WITH memory_contexts AS (
    SELECT * FROM pg_backend_memory_contexts
)
SELECT sum(c1.total_bytes)
FROM memory_contexts c1, memory_contexts c2
WHERE c2.name = 'CacheMemoryContext'
AND c1.path[c2.level] = c2.path[c2.level];

. Общее табличное выражение используется для обеспечения соответствия идентификаторов контекстов в столбце path между двумя вычислениями представления.