51.5. pg_backend_memory_contexts#

51.5. pg_backend_memory_contexts

51.5. pg_backend_memory_contexts #

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

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

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

Тип столбца

Описание

name text

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

ident text

Информация об идентификации контекста памяти. Это поле усекается до 1024 байтов

type text

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

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 может быть прочитано только суперпользователями или ролями с привилегиями роли 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];

Общее табличное выражение (Common Table Expression) используется для того, чтобы идентификаторы контекста в столбце path совпадали при двух обращениях к представлению.