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
при двух обращениях к представлению, используется общее табличное выражение.