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

Мониторинг хода выполнения запросов и использования ресурсов в реальном времени

Apache Doris предоставляет два способа просмотра выполняющихся запросов и потребления ими ресурсов в реальном времени: SQL-команды (SHOW PROC) и REST API. Оба способа возвращают сведения о ходе выполнения на уровне задач, а также ключевые показатели, такие как объём сканирования, CPU, память, shuffle, spill и кеш.

Просмотр выполняющихся запросов с помощью SQL-команд​

Используйте команду SHOW PROC, чтобы получить список всех выполняющихся в данный момент запросов со статистикой в реальном времени.

SHOW PROC "/current_queries";

SHOW PROC "/current_query_stmts" возвращает ту же статистику. Начиная с Doris 4.1.1, обе команды используют единый расширенный формат статистики.

Пример вывода​

*************************** 1. row ***************************
QueryId: e00b00b1155d4042-98862b60016a768a
ConnectionId: 394
Catalog: internal
Database: wzhtest
User: root
ExecTime: 20717
SqlHash: cf263b08302d8be436c97dd5e6f0d283
Statement: INSERT INTO test_query_progress_tb
SELECT DISTINCT k, CONCAT(v, CAST(k AS STRING))
FROM test_query_progress_tb
WHERE k % 2 = 0
ScanRows: 45400000 Rows
ScanBytes: 2.70 GB
ProcessRows: 75598123 Rows
CpuMs: 178336
MaxPeakMemoryBytes: 13.03 GB
CurrentUsedMemoryBytes: 8.69 GB
WorkloadGroupId: 1777125330381
ShuffleSendBytes: 0.00
ShuffleSendRows: 0 Rows
ScanBytesFromLocalStorage: 31.48 MB
ScanBytesFromRemoteStorage: 0.00
SpillWriteBytesToLocalStorage: 0.00
SpillReadBytesFromLocalStorage: 0.00
BytesWriteIntoCache: 0.00
TotalTasks: 74
FinishedTasks: 51
Progress: 68%
*************************** 2. row ***************************
QueryId: e2b8c99658a94743-9ebbf0d036d83295
ConnectionId: 9
Catalog: hive_test
Database: tpch100_parquet
User: root
ExecTime: 10807
SqlHash: f8a30e4182d72cce3eff6cb385005b1f
Statement: select ... from supplier, lineitem l1, orders, nation ... limit 100
ScanRows: 1102562592 Rows
ScanBytes: 9.20 GB
ProcessRows: 112176670 Rows
CpuMs: 53808
MaxPeakMemoryBytes: 3.13 GB
CurrentUsedMemoryBytes: 2.50 GB
WorkloadGroupId: 1777253545394
ShuffleSendBytes: 0.00
ShuffleSendRows: 0 Rows
ScanBytesFromLocalStorage: 0.00
ScanBytesFromRemoteStorage: 9.20 GB
SpillWriteBytesToLocalStorage: 0.00
SpillReadBytesFromLocalStorage: 0.00
BytesWriteIntoCache: 0.00
TotalTasks: 138
FinishedTasks: 65
Progress: 47%

Описание полей​

ПолеОписание
QueryIdУникальный идентификатор запроса
ConnectionIdИдентификатор соединения MySQL
CatalogИмя Catalog, к которому относится запрос, например internal или hive_test
DatabaseИмя базы данных или схемы
UserПользователь, отправивший запрос
ExecTimeВремя, прошедшее с начала выполнения, в миллисекундах
SqlHashMD5-хеш SQL-оператора, позволяющий выявлять одинаковые запросы
StatementТекст SQL-оператора (обрезается, если он слишком длинный)
ScanRowsОбщее количество строк, просканированных на уровне хранения
ScanBytesОбщее количество байтов, просканированных на уровне хранения
ProcessRowsКоличество строк, обработанных конвейером выполнения, отражающее фактическую пропускную способность операторов
CpuMsЗатраченное время CPU в миллисекундах
MaxPeakMemoryBytesПиковый объём памяти, использованный при выполнении запроса
CurrentUsedMemoryBytesОбъём памяти, занимаемый запросом в данный момент
WorkloadGroupIdИдентификатор группы рабочих нагрузок, к которой относится запрос
ShuffleSendBytesОбщее количество байтов, отправленных при обмене данными между узлами (shuffle)
ShuffleSendRowsОбщее количество строк, отправленных при обмене данными между узлами (shuffle)
ScanBytesFromLocalStorageКоличество байтов, просканированных с локальных дисков
ScanBytesFromRemoteStorageКоличество байтов, просканированных из удалённого хранилища (например, HDFS или S3)
SpillWriteBytesToLocalStorageКоличество байтов, выгруженных на локальные диски из-за нехватки памяти (spill)
SpillReadBytesFromLocalStorageКоличество байтов, прочитанных обратно из данных, выгруженных на локальные диски при spill
BytesWriteIntoCacheКоличество байтов, записанных в кеш данных
TotalTasksОбщее количество задач конвейера выполнения в запросе
FinishedTasksКоличество завершённых задач конвейера выполнения
ProgressХод выполнения запроса в процентах, рассчитываемый как FinishedTasks / TotalTasks

Просмотр выполняющихся запросов через REST API​

Назначение: программное получение статистики выполняющихся запросов в реальном времени.

Команда:

curl http://<fe_ip>:<fe_http_port>/rest/v2/manager/query/current_queries

Описание: этот эндпоинт возвращает в формате JSON те же данные столбцов, что и SHOW PROC; значения полей имеют тот же смысл.

Параметры запроса​

ПараметрТипОписание
is_all_nodeBoolean (необязательный)При значении true возвращает выполняющиеся запросы на всех узлах FE. По умолчанию — true.

Пример ответа​

{
"msg": "success",
"code": 0,
"data": {
"columnNames": [
"Frontend", "QueryId", "ConnectionId", "Catalog", "Database",
"User", "ExecTime", "SqlHash", "Statement",
"ScanRows", "ScanBytes", "ProcessRows", "CpuMs",
"MaxPeakMemoryBytes", "CurrentUsedMemoryBytes", "WorkloadGroupId",
"ShuffleSendBytes", "ShuffleSendRows",
"ScanBytesFromLocalStorage", "ScanBytesFromRemoteStorage",
"SpillWriteBytesToLocalStorage", "SpillReadBytesFromLocalStorage",
"BytesWriteIntoCache",
"TotalTasks", "FinishedTasks", "Progress"
],
"rows": [
[
"172.19.0.3", "108e47ab438a4560-ab1651d16c036491", "2", "internal",
"testdb", "root", "6074",
"1a35f62f4b14b9d7961b057b77c3102f", "select sleep(60)",
"0", "0.00", "0", "0",
"0.00", "0.00", "0",
"0.00", "0",
"0.00", "0.00",
"0.00", "0.00",
"0.00",
"1", "1", "100%"
]
]
},
"count": 0
}

Отслеживание хода выполнения отдельного запроса в реальном времени по Trace ID​

Чтобы непрерывно отслеживать ход выполнения конкретного запроса, назначьте ему Trace ID, а затем опрашивайте эндпоинт статистики из отдельного сеанса для получения текущего состояния запроса в реальном времени.

Шаг 1: задайте Trace ID перед выполнением запроса

SET session_context="trace_id:my_trace_id";
SELECT ...;

Шаг 2: опрашивайте статистику в другом сеансе

curl http://<fe_ip>:<fe_http_port>/rest/v2/manager/query/statistics/my_trace_id

Описание: периодически вызывайте этот эндпоинт, чтобы получать актуальные сведения о ходе выполнения запроса до его завершения.

Пример ответа​

{
"msg": "success",
"code": 0,
"data": {
"scanRows": 1102562592,
"scanBytes": 9878424780,
"returnedRows": 12345,
"processRows": 112176670,
"cpuMs": 53808,
"maxPeakMemoryBytes": 3355443200,
"currentUsedMemoryBytes": 2684354560,
"shuffleSendBytes": 0,
"shuffleSendRows": 0,
"scanBytesFromLocalStorage": 0,
"scanBytesFromRemoteStorage": 9878424780,
"spillWriteBytesToLocalStorage": 0,
"spillReadBytesFromLocalStorage": 0,
"bytesWriteIntoCache": 0,
"totalTasksNum": 138,
"finishedTasksNum": 65,
"progress": "47%"
},
"count": 0
}