7.8. Сбор статистики распределённых операторов расширением pgpro_stats
Во время выполнения распределённых запросов Shardman отправляет производные SQL-запросы на удалённые узлы, содержащие секции данных, задействованные в выполнении запроса. Назовём эти SQL-запросы фрагментами запроса. Shardman отправляет такие запросы, используя расширение postgres_fdw. Узел, который запрашивает распределённую таблицу, называется координатор
, а узлы, принимающие фрагменты запроса, называются сегменты
.
Когда расширение pgpro_stats включено на узле кластера Shardman, оно собирает статистику по локальным и распределённым запросам. Информация о распределённых запросах, инициированных этим узлом, является неполной, поскольку в ней отсутствуют данные об удалённых фрагментах запроса. Статистика запросов, инициированных другими узлами, также неоднозначна, поскольку у пользователя нет простого способа определить распределённый запрос, которому соответствует фрагмент.
Для решения этих проблем расширение pgpro_stats для Shardman предоставляет агрегирование статистики для распределённых запросов. Доступ к этой агрегированной статистике можно получить с помощью представления pgpro_stats_sdm_statements
. Однако каждый узел Shardman также собирает статистику для всех операторов, поэтому представление pgpro_stats_statements
может работать так же, как раньше.
Когда узел получает фрагмент запроса, статистика этого узла сохраняется в отдельную общую хеш-таблицу. Периодически и асинхронно каждый узел отправляет эту информацию из отдельной таблицы координатору, который соответствует запросу. Координатор агрегирует статистические данные, полученные из фрагментов запроса, со статистикой своего родительского запроса, который является запросом, инициированным клиентом.
Расширение pgpro_stats запускает отдельный фоновый рабочий процесс. Этот рабочий процесс отвечает за отправку накопленной статистики узлам-координаторам либо каждые 5 секунд, либо при срабатывании защитного механизма. Функция сбора запускает этот механизм, когда хеш-таблица почти заполнена.
Для уменьшения сетевого трафика, инициированного отправителем статистики, к отправляемым статистическим данным применяется сжатие. Метод сжатия можно выбрать с помощью параметра конфигурации pgpro_stats.transport_compression
.
Каждый узел хранит общее число записей статистики, полученных от узла сегмента, и метку времени их последнего приёма. Когда узел-координатор получает сообщение статистики, он изменяет соответствующие значения, которые доступны через интерфейс SQL.
В расширениях Shardman есть дополнительные SQL-функции pgpro_stats, описанные в Раздел 6.2, и параметры конфигурации, описанные в «Параметры pgpro_stats».