Перейти к основному содержимому

shared_pool_view. Кеширования результатов маскирования и сериализации

В исходном дистрибутиве установлено по умолчанию: нет.

Связанные компоненты: нет.

Схема размещения: ext.

Сведения

Разработано СУБД Pangolin.

Расширение разработано в рамках функциональности кеширования результатов маскирования и сериализации и предоставляет возможность просмотра Shared Pool.

примечание

Функции расширения и добавленные представления изначально доступны только создателю расширения и суперпользователю. Чтобы другие пользователи могли ими пользоваться, необходимо выдать им соответствующие права.

Функции

Для административного управления Shared Pool предусмотрены две функции расширения shared_pool_view:

shared_pool_reset()

Функция удаляет все записи Shared Pool.

Синтаксис:

shared_pool_reset()

Входные параметры:

Отсутствуют.

Возвращаемое значение:

Функция возвращает количество удаленных элементов.

shared_pool_delete()

Функция удаляет одну запись по ключу (pool_id).

Синтаксис:

shared_pool_delete(pool_id)

Входные параметры:

Название параметраТип значенияОписание
pool_idbigintИдентификатор пула

Возвращаемое значение:

Функция возвращает значение 1, если запись была удалена, или значение 0, если записи с переданным ключом не существовало.

Пример использования:

SELECT sum(shared_pool_delete(pool_id))
FROM (
SELECT pool_id
FROM shared_pool_list
WHERE data_preview LIKE 'SELECT data%'
) AS t;

В примере выполняется удаление всех записей, чей предварительный просмотр данных (data_preview) начинается с 'SELECT data'. Функция возвращает суммарное количество удаленных элементов.

Доработка

Доработка не проводилась.

Ограничения

Ограничения отсутствуют.

Установка

При наличии прав администратора СУБД включение модуля возможно выполнить вручную:

CREATE EXTENSION shared_pool_view SCHEMA ext;

Настройка

Конфигурационные параметры

Параметр

Допустимые значения

Значение по умолчанию

Установка

Описание

shared_pool_entry_count

1–10000

0

Требуется перезагрузка БД

Максимальное количество записей в хеш-таблице Shared Pool

shared_pool_partition_count

1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024

8

Требуется перезагрузка БД

Количество партиций в хеш-таблице Shared Pool

enable_shared_pool_for_masking

on/off

on

Можно менять в рамках сессии

Включение или выключение использования Shared Pool для переиспользования маскированных текстов запросов

enable_shared_pool_for_tracing_plans

on/off

on

Можно менять в рамках сессии

Включение или выключение использования Shared Pool для переиспользования сериализованных планов запросов

enable_shared_pool_local_cache

on/off

off

Можно менять в рамках сессии

Включение или выключение кеша содержимого Shared Pool в памяти процесса. Кеш позволяет снизить contention при обращении к shared_pool

enable_shared_pool_for_plans

boolean

Включает или выключает использование Shared Pool для переиспользования планов запросов. Можно менять в рамках сессии

Логические: true, false, on, off, 0, 1

off

enable_shared_pool_plan_binary_serialize

boolean

Включает или выключает бинарную сериализацию планов в Shared Pool. Когда отключено, выполняется встроенная в PostgreSQL строковая сериализация (nodeToString). Требуется перезагрузка СУБД

Логические: true, false, on, off, 0, 1

on

shared_pool_relid_poolid_mapping_capacity

integer

Задает максимальный размер хранящегося в общей памяти отображения relidpool_id. Требуется перезагрузка СУБД

11000000

2000

Диагностика

Расширение shared_pool_view содержит два представления и функцию, с помощью которых можно анализировать состояние Shared Pool:

  • shared_pool_overview;
  • shared_pool_list;
  • shared_pool_explain_plan().

Представление shared_pool_overview

Список столбцов представления shared_pool_overview:

Столбец

Описание

capacity_elems

Максимальное количество элементов в Shared Pool, равно значению параметра shared_pool_entry_count

entries_used

Количество занятых элементов Shared Pool

entries_free

Количество свободных элементов Shared Pool

bytes_used

Количество общей памяти, используемой для хранения объектов Shared Pool

load_factor

Отношение entries_used к capacity_elems

access_count

Количество обращений к Shared Pool

hit_rate

Отношение чтений из Shared Pool к access_count

Представление shared_pool_overview всегда возвращает одну строку.

Представление shared_pool_list

Список колонок представления shared_pool_list:

Столбец

Описание

query_id

64-битный целочисленный идентификатор записи в Shared Pool

data_preview

текстовая копия хранимого содержимого элемента Shared Pool

data_len

Размер данных элемента Shared Pool в байтах

partition

Номер партиции, к которой относится данный элемент

Функция shared_pool_explain_plan()

Функция shared_pool_explain_plan(pool_id bigint) по pool_id возвращает текстовое представление плана, хранящегося в ячейке Shared Pool по этому идентификатору.

Пример использования:

postgres=# SELECT abalance FROM pgbench_accounts WHERE aid = 13;
 abalance 
----------
0
(1 row)
postgres=# SELECT filler FROM pgbench_accounts WHERE abalance <> 0;
 filler 
--------
(0 rows)
postgres=# SELECT pool_id, last_access FROM shared_pool_list WHERE data_type = 'query plan';
       pool_id       | last_access 
---------------------+-------------
8435959827479901312 | 10
-841318586528298585 | 11
6427153288372725900 | 6
924569139818791405 | 5
3266497213927765679 | 9
(5 rows)
postgres=# SELECT shared_pool_explain_plan(8435959827479901312);
                              shared_pool_explain_plan                              
------------------------------------------------------------------------------------
Gather (cost=1000.00..11801.27 rows=1 width=85) +
Workers Planned: 2 +
-> Parallel Seq Scan on pgbench_accounts (cost=0.00..10801.17 rows=1 width=85)+
Filter: (abalance <> $1) +

(1 row)
postgres=# SELECT shared_pool_explain_plan(3266497213927765679);
                                   shared_pool_explain_plan                                   
----------------------------------------------------------------------------------------------
Index Scan using pgbench_accounts_pkey on pgbench_accounts (cost=0.42..8.44 rows=1 width=4)+
Index Cond: (aid = $1) +

(1 row)

Использование модуля

Функции включены по умолчанию, дополнительные действия не требуются.

Выключение функциональности

  1. Выключите параметры enable_shared_pool_for_masking и enable_shared_pool_for_tracing_plans в конфигурационном файле postgresql.conf/postgres.yml:

    enable_shared_pool_for_masking = off
    enable_shared_pool_for_tracing_plans = off
  2. Перезапустите СУБД Pangolin:

    pg_ctl restart