53.5. pg_backend_memory_contexts #
В представлении pg_backend_memory_contexts показываются все контексты памяти серверного процесса, обслуживающего текущий сеанс.
Представление pg_backend_memory_contexts содержит одну строку для каждого контекста памяти.
Таблица 53.5. Столбцы pg_backend_memory_contexts
Тип столбца Описание |
|---|
Имя контекста памяти |
Информация для идентификации контекста памяти. Размер поля ограничен 1024 байтами |
Тип контекста памяти |
Нумерованный (начиная с 1) уровень контекста в иерархии контекстов памяти. Уровень контекста также указывает на позицию данного контекста в столбце |
Массив временных числовых идентификаторов, описывающий иерархию контекстов памяти. Первый элемент соответствует |
Общий объём памяти, выделенный для данного контекста, в байтах |
Общее количество блоков памяти, выделенных для данного контекста |
Объём свободного пространства в байтах |
Общее количество свободных участков |
Объём использованного пространства в байтах |
По умолчанию представление 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 при двух обращениях к представлению, используется общее табличное выражение.