Статистика производительности (Performance statistics)#
DataGrid включает в себя встроенный инструмент профилирования кластера. Работа с инструментом состоит из двух этапов:
Сбор статистики на кластере.
Создание отчета о производительности.
Сбор статистики производительности#
Для управления сбором статистики производительности используются:
Интерфейс JMX:
Метод
Описание
start()Начать сбор статистики по кластеру
stop()Остановить сбор статистики по кластеру
rotate()Произвести ротацию файлов статистики в кластере
started()true, если сбор статистики начатУтилита
control:Синтаксис команды:
control.sh|bat --performance-statistics [start|stop|rotate|status]где:
start— начать сбор статистики по кластеру;stop— остановить сбор статистики по кластеру;rotate— произвести ротацию файлов статистики в кластере;status— получить статус сбора статистики по кластеру.
Каждый узел собирает статистику производительности в бинарный файл. Этот файл размещается в рабочей директории DataGrid в каталоге {WORK_DIR}/perf_stat. Обычные события производительности записываются в node-{nodeId}.prf. Если файл с таким именем уже существует, к нему добавляется индекс: node-{nodeId}-{index}.prf.
Когда запускается сбор статистики, каждый узел также делает запись системных представлений в файл node-{nodeId}-system-views.prf. Если файл с таким именем уже существует, к нему добавляется индекс: node-{nodeId}-system-views-{index}.prf. Операция rotate применяется только к файлам обычных событий производительности. Подробнее о системных представлениях написано в разделе «Мониторинг».
Внимание
Файлы статистики производительности могут содержать конфиденциальную информацию, например: тексты запросов, имена кешей, названия задач, атрибуты узлов и значения, которые предоставляются системными представлениями. Храните и передавайте эти файлы в соответствии с политиками безопасности.
Файлы статистики производительности используются для создания отчета в режиме офлайн.
Для обычных событий производительности узлы используют циклический off-heap-буфер для временного хранения сериализованной статистики. Записывающий поток отправляет содержимое буфера в файл при достижении порога. Если буфер переполняется из-за медленного диска, некоторые показатели в статистике пропускаются. Подробнее о настройке написано ниже в разделе «Системные свойства».
Каждый процесс сбора статистики создает на узлах новые файлы. У каждого следующего файла будет такое же имя, как у предыдущего, но с соответствующим индексом. Например:
node-faedc6c9-3542-4610-ae10-4ff7e0600000.prf;node-faedc6c9-3542-4610-ae10-4ff7e0600000-1.prf;node-faedc6c9-3542-4610-ae10-4ff7e0600000-2.prf;node-faedc6c9-3542-4610-ae10-4ff7e0600000-system-views.prf;node-faedc6c9-3542-4610-ae10-4ff7e0600000-system-views-1.prf.
Создание отчета#
Расширение performance-statistics-ext позволяет генерировать офлайн-отчет в HTML-формате из файлов статистики производительности. Расширение находится в директории utils.
Для создания отчета:
Остановите сбор статистики и поместите файлы со всех узлов в пустой каталог. Например:
/path_to_files/ ├── node-162c7147-fef8-4ea2-bd25-8653c41fc7fa.prf ├── node-162c7147-fef8-4ea2-bd25-8653c41fc7fa-system-views.prf ├── node-7b8a7c5c-f3b7-46c3-90da-e66103c00001.prf ├── node-7b8a7c5c-f3b7-46c3-90da-e66103c00001-system-views.prf ├── node-faedc6c9-3542-4610-ae10-4ff7e0600000.prf └── node-faedc6c9-3542-4610-ae10-4ff7e0600000-system-views.prfФайлы
node-*-system-views*.prfхранятся рядом с обычными файлами статистики производительности. Если файлы системных представлений слишком велики для генерации отчета, их можно не включать в каталог — в этом случае отчет сгенерируется без разделаSystem views.Запустите скрипт из поставки:
performance-statistics-tool/build-report.sh path_to_files
Отчет о производительности создается в новом каталоге по пути файлов статистики производительности:
path_to_files/report_yyyy-MM-dd_HH-mm-ss/
Для просмотра отчета откройте в браузере страницу report_yyyy-MM-dd_HH-mm-ss/index.html.
Также можно вывести все записи статистики производительности в консоль или файл с помощью скрипта print-statistics.sh из пакета performance-statistics-ext. Например, можно вывести записи о времени выполнения создания контрольных точек и записи о троттлинге страниц:
performance-statistics-tool/print-statistics.sh path_to_files --ops CHECKPOINT,PAGES_WRITE_THROTTLE
Чтобы записать результат выполнения команды в файл, используйте параметр --out:
performance-statistics-tool/print-statistics.sh path_to_files --ops CHECKPOINT,PAGES_WRITE_THROTTLE --out checkpoints.json
Какие данные собираются#
Статистика производительности включает в себя записи:
Категория |
Запись |
|---|---|
Операции с кешем |
Операции кеш-API и |
Метаданные кеша |
Записи о запуске кеша с идентификаторами и именами кешей |
Транзакции |
Записи об операциях |
Запросы |
Записи об SQL-запросах, scan-запросах и запросах по индексированным полям объектов с указанием текста запроса или деталей кеша/индекса, идентификатора запроса, времени начала, длительности и флага успешного выполнения |
Детали запросов |
Логические и физические операции чтения запроса, обработанные строки и пользовательские свойства запроса |
Задачи и задания |
Записи о вычислительных задачах и заданиях с указанием имен задач, идентификаторов сессий, времени выполнения, времени в очереди, аффинити-партиций и флага тайм-аута |
Персистентность |
Записи о времени выполнения создания контрольных точек и записи о троттлинге страниц |
Системные представления |
Схемы и строки системных представлений, которые были зафиксированы при запуске сбора статистики (некоторые представления пропускаются, подробнее об этом написано в списке ниже) |
Системные представления, которые пропускаются из-за больших объемов данных или дублирования информации, собираемой в виде записей о производительности:
baseline.node.attributes;node.attributes;metrics;caches;sql.queries;nodes;cacheGroupPageLists;dataRegionPageLists;partitionStates;statisticsPartitionData;metastorage;distributed.metastorage.
Пример разделов HTML-отчета#
В отчет входят разделы: Cluster info (информация о кластере), Cache operations (операции с кешем), Transactions (транзакции), SQL queries (SQL-запросы), Scan queries (scan-запросы), Index queries (запросы по индексированным полям объектов), Tasks and jobs (задачи и задания) и System views (системные представления). Если в исходной директории есть файлы node-*-system-views*.prf, раздел System views будет заполнен данными из этих файлов.
Cluster info (информация о кластере)#
В разделе отображаются топология кластера и кеши, которые были найдены в исходных файлах (таблицы Cluster nodes и Started caches):

Cache operations (операции с кешем)#
В разделе отображается активность кеша и CacheStore для выбранных кеша и узла. Селекторы кеша и узла являются фильтрами для всех диаграмм на странице.
Столбчатая диаграмма демонстрирует распределение количества операций с кешем по их типам:

Линейная диаграмма отображает количество операций во времени для каждого типа операции:

В разделе Cache store operations содержатся аналогичные разбивки для вызовов CacheStore. Диаграмма распределения обобщает количество операций CacheStore по типам:

Линейные диаграммы показывают количество операций CacheStore во времени:

Transactions (транзакции)#
В разделе отображается транзакционная активность для выбранных кеша и узла. Гистограмма показывает распределение транзакций по длительности:

Под гистограммой расположены линейные диаграммы, которые показывают количество операций commit и rollback во времени:

SQL queries (SQL-запросы)#
В разделе указана сводная статистика SQL-запросов. В таблице Overall statistics отображаются общее количество выполнений, длительность и количество чтений для каждого запроса. В каждой строке можно развернуть подтаблицу Properties с планами фаз Map и Reduce и подтаблицу Rows с информацией о строках, полученных на узлах Mapper и Reducer:

В таблице Top of slowest queries перечислены медленные выполнения запросов с аналогичными развертываемыми подтаблицами:

Scan queries (scan-запросы)#
В разделе указана сводная статистика scan-запросов по кешу и информация о самых медленных запросах (таблицы Overall statistics и Top of slowest queries):

Index queries (запросы по индексированным полям объектов)#
В разделе указана сводная статистика запросов по индексированным полям объектов и информация о самых медленных из них (таблицы Overall statistics и Top of slowest queries):

Tasks and jobs (задачи и задания)#
В разделе указана сводная статистика выполнения задач. В таблице Overall statistics отображаются результаты выполнения, общая продолжительность и
количество заданий для каждой задачи:

В таблице Top of slowest tasks перечислены медленно выполняемые задачи. В каждой строке можно развернуть подтаблицу Jobs с указанием продолжительности заданий для каждого узла:

System views (системные представления)#
В разделе указаны строки из собранных системных представлений. На вкладке доступны селектор узла, селектор системного представления и таблица с возможностью поиска по страницам для выбранного представления:

Вывод статистики#
Скрипт предоставляет инструмент для вывода всех записей статистики производительности в консоль или в JSON-файл. Используйте этот инструмент для доступа к отдельным записям.
Для печати статистики запустите скрипт из релиз-пакета инструмента:
performance-statistics-tool/print-statistics.sh <path_to_files>
где path_to_files — путь к файлу статистики или к директории с несколькими файлами статистики.
Опции, которые поддерживает инструмент:
Опция |
Описание |
|---|---|
|
Добавляет результат выполнения команды в JSON-формате в указанный файл |
|
Выводит только указанные типы операций через запятую |
|
Выводит только записи, время начала которых больше или равно указанному значению (Unix Epoch мс) |
|
Выводит только записи, время начала которых меньше или равно указанному значению (Unix Epoch мс) |
|
Выводит только записи, которые относятся к указанным через запятую именам кеша |
Скрипт позволяет фильтровать операции по типу операции, времени или кешу. Для получения более подробной информации вызовите справку:
performance-statistics-tool/print-statistics.sh --help
Примеры команд:
performance-statistics-tool/print-statistics.sh path_to_files --ops QUERY,QUERY_ROWS,QUERY_PROPERTY
performance-statistics-tool/print-statistics.sh path_to_files --ops SYSTEM_VIEW_ROW
performance-statistics-tool/print-statistics.sh path_to_files --ops CHECKPOINT,PAGES_WRITE_THROTTLE
performance-statistics-tool/print-statistics.sh path_to_files --from 1713700000000 --to 1713703600000
performance-statistics-tool/print-statistics.sh path_to_files --caches cache1,cache2 --out perfstat.json
Пример вывода статистики в терминале:
{"op":"CACHE_GET","nodeId":"955130d1-5218-4e46-87f6-62755e92e9b4","cacheId":-1809642915,"startTime":1616837094237,"duration":64992213}
{"op":"CACHE_PUT","nodeId":"955130d1-5218-4e46-87f6-62755e92e9b4","cacheId":-1809642915,"startTime":1616837094237,"duration":879869}
{"op":"CACHE_GET_AND_PUT","nodeId":"955130d1-5218-4e46-87f6-62755e92e9b4","cacheId":1328364293,"startTime":1616837094248,"duration":17186240}
{"op":"TX_COMMIT","nodeId":"955130d1-5218-4e46-87f6-62755e92e9b4","cacheIds":[-1809642915],"startTime":1616837094172,"duration":184887787}
{"op":"QUERY","nodeId":"955130d1-5218-4e46-87f6-62755e92e9b4","type":"SQL_FIELDS","text":"create table Person (id int, val varchar, primary key (id))","id":0,"startTime":1616837094143,"duration":258741595,"success":true}
Системные свойства#
Свойство |
Тип |
Значение по умолчанию |
Описание |
|---|---|---|---|
|
|
32 ГБ |
Максимальный размер файла статистики производительности в байтах. Сбор статистики производительности прекращается при превышении максимального размера файла |
|
|
32 МБ |
Размер off-heap-буфера статистики производительности в байтах |
|
|
8 МБ |
Минимальный размер пакета данных статистики производительности для отправления в файл в байтах |
|
|
10240 |
Порог закешированных строк статистики производительности. Кеширование строк прекращается при превышении порога |
Настройки для аудита событий#
Для настройки аудита событий необходимо:
Добавить
RestProcessorPluginProviderв список плагинов.Включить события
RestEventType.EVT_REST_REQ_SUCCEEDEDиRestEventType.EVT_REST_REQ_FAILEDвIgniteConfiguration.Пример
XML#<bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration" primary="true"> ... <property name="pluginProviders"> <list> ... <ref bean="restProcPlugin"/> </list> </property> <property name="includeEventTypes" ref="eventTypes"/> ... </bean> <bean id="restProcPlugin" class="com.sbt.security.ignite.core.rest.RestProcessorPluginProvider"> <property name="configuration"> <bean id="restProcPluginConfiguration" class="com.sbt.security.ignite.core.rest.RestProcessorPluginConfiguration"/> </property> </bean> <util:list id="eventTypes" value-type="java.lang.Integer"> ... <util:constant static-field="com.sbt.security.ignite.core.events.RestEventType.EVT_REST_REQ_SUCCEEDED"/> <util:constant static-field="com.sbt.security.ignite.core.events.RestEventType.EVT_REST_REQ_FAILED"/> ... </util:list>