Вы можете отправлять запросы в специальные служебные таблицы (system views), чтобы следить за состоянием базы данных. Эти таблицы доступны из корня дерева базы данных и используют системный префикс пути .sys.
Индекс поля первичного ключа соответствующей таблицы содержится в описаниях доступных полей далее по тексту.
Обращение к системным таблицам имеет скорее аналитический характер нагрузки. Частое обращение к ним в больших базах будет существенно расходовать системные ресурсы. Рекомендуемая нагрузка не более 1-2 RPS.
Партиции
Следующая системная таблица хранит детализированную информацию об отдельных партициях всех таблиц базы данных:
partition_stats — cодержит информацию о моментальных метриках и кумулятивные счетчики операций. К первым относятся, например, данные о нагрузке на CPU или количестве выполняемых транзакций. Ко вторым — общее количество прочитанных строк.
Предназначена для выявления различных неравномерностей в нагрузке на партицию или отображения размера данных в ней.
Кумулятивные поля (RowReads, RowUpdates и т.д.) хранят накопленные значения с момента последнего старта таблетки, обслуживающей партицию.
Список таблиц базы с размерами и нагрузкой в моменте:
SELECT
Path,
COUNT(*) as Partitions,
SUM(RowCount) asRows,
SUM(DataSize) as Size,
SUM(CPUCores) as CPU
FROM `.sys/partition_stats`
GROUPBY Path
Топы запросов
Следующие системные таблицы хранят данные для анализа потока пользовательских запросов:
top_queries_by_duration_one_minute — данные разбиты на минутные интервалы, содержит топ-5 запросов с наибольшим полным временем исполнения за последние 6 часов;
top_queries_by_duration_one_hour — данные разбиты на часовые интервалы, содержит топ-5 запросов с наибольшим полным временем исполнения за последние 2 недели;
top_queries_by_read_bytes_one_minute — данные разбиты на минутные интервалы, содержит топ-5 запросов с наибольшим количеством прочитанных из таблицы байт за последние 6 часов;
top_queries_by_read_bytes_one_hour — данные разбиты на часовые интервалы, содержит топ-5 запросов с наибольшим количеством прочитанных из таблицы байт за последние 2 недели;
top_queries_by_cpu_time_one_minute — данные разбиты на минутные интервалы, содержит топ-5 запросов с наибольшим затраченным процессорным временем за последние 6 часов;
top_queries_by_cpu_time_one_hour — данные разбиты на часовые интервалы, содержит топ-5 запросов с наибольшим затраченным процессорным временем за последние 2 недели.
Различные запуски запроса с одним и тем же текстом дедуплицируются. Топ содержит информацию о конкретном запуске с максимальным значением соответствующей характеристики запроса в пределах одного временного интервала.
Поля, предоставляющие информацию о затраченном процессорном времени (...CPUTime), выражены в микросекундах.
Текст запроса ограничен 4 килобайтами.
Все таблицы содержат одинаковый набор полей:
Поле
Описание
IntervalEnd
Момент закрытия минутного или часового интервала. Тип: Timestamp. Ключ: 0.
Момент окончания исполнения запроса. Тип: Timestamp.
Type
Тип запроса ("data", "scan", "script"). Тип: String.
ReadRows
Количество прочитанных строк. Тип: Uint64.
ReadBytes
Количество прочитанных байт. Тип: Uint64.
UpdateRows
Количество записанных строк. Тип: Uint64.
UpdateBytes
Количество записанных байт. Тип: Uint64.
DeleteRows
Количество удалённых строк. Тип: Uint64.
DeleteBytes
Количество удалённых байт. Тип: Uint64.
Partitions
Количество партиций таблиц, участвовавших в исполнении запроса. Тип: Uint64.
UserSID
Security ID пользователя. Тип: String.
ParametersSize
Размер параметров запроса в байтах. Тип: Uint64.
CompileDuration
Длительность компиляции запроса. Тип: Interval.
FromQueryCache
Использовался ли кэш подготовленных запросов. Тип: Bool.
CPUTime
Общее процессорное время, использованное для исполнения запроса (микросекунды). Тип: Uint64.
ShardCount
Количество шардов, участвующих в исполнении запроса. Тип: Uint64.
SumShardCPUTime
Общее процессорное время, затраченное в шардах. Тип: Uint64.
MinShardCPUTime
Минимальное процесорное время, затраченное в шардах. Тип: Uint64.
MaxShardCPUTime
Максимальное процессорное время, затраченное в шардах. Тип: Uint64.
ComputeNodesCount
Количество вычислительных нод, задействованных в исполнении запроса. Тип: Uint64.
SumComputeCPUTime
Общее процессорное время, затраченное в вычислительных нодах. Тип: Uint64.
MinComputeCPUTime
Минимальное процессорное время, затраченное в вычислительных нодах. Тип: Uint64.
MaxComputeCPUTime
Максимальное процессорное время, затраченное в вычислительных нодах. Тип: Uint64.
CompileCPUTime
Процессорное время, затраченное на компиляцию запроса. Тип: Uint64.
ProcessCPUTime
Процессорное время, затраченное на общую обработку запроса. Тип: Uint64.
Примеры:
Топ запросов по времени выполнения за последнюю минуту их отправки:
PRAGMA AnsiInForEmptyOrNullableItemsCollections;
$last= (
SELECTMAX(IntervalEnd)
FROM `.sys/top_queries_by_duration_one_minute`
);
SELECT
IntervalEnd,
Rank,
QueryText,
Duration
FROM `.sys/top_queries_by_duration_one_minute`
WHERE IntervalEnd IN $last
Запросы, прочитавшие больше всего байт, в разбивке по минутам:
SELECT
IntervalEnd,
QueryText,
ReadBytes,
ReadRows,
Partitions
FROM `.sys/top_queries_by_read_bytes_one_minute`
WHERE Rank =1
Подробная информация о запросах
Следующая системная таблица хранит подробную информацию о запросах:
query_metrics_one_minute — данные разбиты по минутным интервалам, содержит до 256 запросов за последние 6 часов.
Каждая строка таблицы содержит информацию о множестве случившихся за интервал запросов с одинаковым текстом. Поля таблицы предоставляют минимальное, максимальное и суммарное значение по каждой отслеживаемой характеристике запроса. В пределах интервала запросы отсортированы по убыванию суммарного потраченного процессорного времени.
Ограничения:
текст запроса ограничен 4 килобайтами;
статистика может быть неполной, если база испытывает сильную нагрузку.
Структура таблицы:
Поле
Описание
IntervalEnd
Момент закрытия минутного интервала. Тип: Timestamp. Ключ: 0.
Rank
Ранг запроса в пределах интервала (по полю SumCPUTime). Тип: Uint32. Ключ: 1.
QueryText
Текст запроса. Тип: Utf8.
Count
Количество запусков запроса. Тип: Uint64.
SumDuration
Общая длительность запросов. Тип: Interval.
Count
Количество запусков запроса. Тип: Uint64.
SumDuration
Общая длительность запросов. Тип: Interval.
MinDuration
Минимальная длительность запроса. Тип: Interval.
MaxDuration
Максимальная длительность запроса. Тип: Interval.
SumCPUTime
Общее затраченное процессорное время. Тип: Uint64.
MinCPUTime
Минимальное затраченное процессорное время. Тип: Uint64.
MaxCPUTime
Максимальное затраченное процессорное время. Тип: Uint64.
SumReadRows
Общее количество прочитанных строк. Тип: Uint64.
MinReadRows
Минимальное количество прочитанных строк. Тип: Uint64.
MaxReadRows
Максимальное количество прочитанных строк. Тип: Uint64.
SumReadBytes
Общее количество прочитанных байт. Тип: Uint64.
MinReadBytes
Минимальное количество прочитанных байт. Тип: Uint64.
MaxReadBytes
Максимальное количество прочитанных байт. Тип: Uint64.
SumUpdateRows
Общее количество записанных строк. Тип: Uint64.
MinUpdateRows
Минимальное количество записанных строк. Тип: Uint64.
MaxUpdateRows
Максимальное количество записанных строк. Тип: Uint64.
SumUpdateBytes
Общее количество записанных байт. Тип: Uint64.
MinUpdateBytes
Минимальное количество записанных байт. Тип: Uint64.
MaxUpdateBytes
Максимальное количество записанных байт. Тип: Uint64.
SumDeleteRows
Общее количество удалённых строк. Тип: Uint64.
MinDeleteRows
Минимальное количество удалённых строк. Тип: Uint64.
MaxDeleteRows
Максимальное количество удалённых строк. Тип: Uint64.
SumRequestUnits
Общее количество использованных RequestUnits. Тип: Uint64.
MinRequestUnits
Минимальное количество использованных RequestUnits. Тип: Uint64.
MaxRequestUnits
Максимальное количество использованных RequestUnits. Тип: Uint64.
Примеры:
Топ-10 запросов за последние 6 часов по общему количеству записанных строк в минутном интервале:
Недавние запросы, прочитавшие больше всего байт за минуту:
SELECT
IntervalEnd,
SumReadBytes,
MinReadBytes,
SumReadBytes / Count as AvgReadBytes,
MaxReadBytes,
QueryText
FROM `.sys/query_metrics_one_minute`
WHERE SumReadBytes >0ORDERBY IntervalEnd DESC, SumReadBytes DESC
LIMIT 100
История перегруженных партиций
Следующие системные таблицы хранят историю моментов высокой нагрузки на отдельные партиции таблиц БД:
top_partitions_one_minute — данные разбиты на минутные интервалы, содержит историю за последние 6 часов;
top_partitions_one_hour — данные разбиты на часовые интервалы, содержит историю за последние 2 недели.
В таблицы попадают партиции с пиковой нагрузкой более 70 % (CPUCores > 0,7). В пределах одного интервала партиции ранжированы по пиковому значению нагрузки.
Обе таблицы содержат одинаковый набор полей:
Поле
Описание
IntervalEnd
Момент закрытия минутного или часового интервала. Тип: Timestamp. Ключ: 0.
Rank
Ранг партиции в пределах интервала (по CPUCores). Тип: Uint32. Ключ: 1.