Информация о метриках
В этом документе описаны данные собираемые и передаваемые для анализа запросов выполняющихся на базе Greenplum
Данные передаются с помощью протокола gRPC. Протокол общения можно посмотреть в подпроекте protos.
Общие сведения
Схематично выполнение запроса в базе Greenplum можно изобразить следующим образом:

Greenplum предоставляет возможность встраивания кода на разных этапах выполнения запроса и обработки необходимых данных с помощью так называемых хуков.
Бибилотека использует слдиющий список хуков - ExecutorStart_hook - ExecutorRun_hook - ExecutorEnd_hook - ExecutorFinish_hook - query_info_collect_hook
Именно в эти моменты собираются статистические данные по выполняемому запросу и отправляются на сервер.
Список метрик
Заголовок
Общая информация идентифицирующая запрос, передается в каждом пакете с метриками.
QueryInfoHeader
| Атрибут | Тип | Описание |
|---|---|---|
| datetime | timestamp | Локальное время на сегменте выполняющим часть запроса |
| pid | int32 | Process ID - идентификатор процесса |
| gpIdentity | GpId | Данные о базе данных (см. ниже) |
| tmid | int32 | Идентификатор транзакции |
| ssid | int32 | Идентификатор сессии |
| ccnt | int32 | Номер команды в сессии |
GpId
| Атрибут | Тип | Описание |
|---|---|---|
| dbid | int32 | Идентификатор базы данных на сегменте |
| segindex | int32 | Идентификатор сегмента |
| gp_role | GpRoleValue | Роль greenplum, в которой была запущена база |
| gp_session_role | GpRoleValue | Роль greenplum в текущей сессии |
GpRoleValue
- GP_ROLE_UTILITY
- GP_ROLE_DISPATCH
- GP_ROLE_EXECUTE
Информация о текущем запросе и сессии
SessionInfo
| Атрибут | Тип | Описание |
|---|---|---|
| sql | string | Текст выполняемого запроса |
| userName | string | Имя пользователя, запустившего запрос |
| databaseName | string | Имя базы данных, в которой запущен запрос |
| resourceGroup | string | Текущее имя ресурсной группы. Может изменятся в ходе выполнения запроса |
| applicationName | string | Название приложения вызвавшего запрос |
| params | repeated KeyValuePair | Список предопределенных параметров, значение которых отправляется в начале выполнения запроса. Список параметров задается настройкой metric.user_params |
Информация о процессе выполняющем запрос
Для каждого процесса выполняющего часть запроса собирается системная статистика использования процессор, памяти, дисков.
Данные по использованию процесора
CpuStat
| Атрибут | Тип | Описание |
|---|---|---|
| runningTimeSeconds | double | Общее время с момента запуска процесса в секундах |
| userTimeSeconds | double | Время работы в пользовательском пространстве в секундах |
| kernelTimeSeconds | double | Время работы на уровне ядра в секундах |
Данные по использованию памяти
MemoryStat
| Атрибут | Тип | Описание |
|---|---|---|
| vsize | uint64 | Размер виртуальной памяти в байтах |
| rss | uint64 | Число страниц выделенных процессом в реальной памяти |
| VmSizeKb | uint64 | Размер виртуальной памяти в Кб (данные из /proc/[pid]/status) |
| VmPeakKb | uint64 | Максимальный размер виртуальной памяти в Кб (данные из /proc/[pid]/status) |
Данные по работе с дисками
StorageStat
| Атрибут | Тип | Описание |
|---|---|---|
| rchar | uint64 | Число символов, запрошенных для чтения приложением |
| wchar | uint64 | Число символов, запрошенных для записи приложением |
| syscr | uint64 | Число операций чтения |
| syscw | uint64 | Число операций записи |
| read_bytes | uint64 | Примерное число байт, которое было реально прочитано с диска |
| write_bytes | uint64 | Примерное число байт, которое было реально записано на диск |
| cancelled_write_bytes | uint64 | Число байт, запись которых была отменена |
План запроса
На старте выполнения запроса шлется план выполнения и используемый генератор. План запроса собирается и отправляется двумя способами: в виде привычного текстового вывода команды explain и в виде дерева.
Для каждого шага выполнения запрос шлется статистика о предпологаемой стоимости шага, а в конце запроса о реально затраченых ресурсах.
MetricPlan
| Атрибут | Тип | Описание |
|---|---|---|
| type | GpdbNodeType | Тип шага. Список допустимых вариантов в GpdbNodeType.proto |
| plan_node_id | int32 | Уникальный идентификатор шага запроса |
| parent_plan_node_id | int32 | Идентификатор родителя. Для корня - 0 |
| startup_cost | double | Расчетное время затраченное до начала вывода данных |
| total_cost | double | Расчетное время выдачи всех данных, считая что выполнится до конца |
| plan_rows | double | Расчетное число строк, считая что выполнится до конца |
| plan_width | int32 | Расчетное средняя ширина строки в байтах |
| motionInfo | MetricMotionInfo | Дополнительная информация о motion node |
| relationInfo | MetricRelationInfo | Информация об участвующем в операции объеке |
| scanIndexName | string | Для скан нод имя индекса |
| scanDirection | ScanDirection | Для скан нод направление сканирование |
| sliceInfo | MetricSliceInfo | Информация о slice текущего шага |
| statement | string | В зависимости от типа шага информация о фильтрах ввиде JSON объекта сериализованного в строку |
MetricInstrumentation - Реальная статистика выполнения запроса
| Атрибут | Тип | Описание |
|---|---|---|
| ntuples | uint64 | Общее число произведенных строк |
| nloops | uint64 | Число циклов при выполнении этого шага |
| tuplecount | uint64 | Число строк в текущем цикле |
| firsttuple | double | Время затраченое на получение первой строчки в этом цикле |
| startup | double | Время затраченное до начала вывода данных |
| total | double | Общее время выдачи данных |