Системные таблицы базы данных
Вы можете отправлять запросы в специальные служебные таблицы (system views), чтобы следить за состоянием базы данных. Эти таблицы доступны из корня дерева базы данных и используют системный префикс пути .sys
.
Индекс поля первичного ключа соответствующей таблицы содержится в описаниях доступных полей далее по тексту.
Системные таблицы содержат:
- Детальные данные об отдельных партициях таблиц БД.
- Топы запросов по определенным характеристикам.
- Подробная информация о запросах.
- История перегруженных партиций.
Примечание
Обращение к системным таблицам имеет скорее аналитический характер нагрузки. Частое обращение к ним в больших базах будет существенно расходовать системные ресурсы. Рекомендуемая нагрузка не более 1-2 RPS.
Партиции
Следующая системная таблица хранит детализированную информацию об отдельных партициях всех таблиц базы данных:
partition_stats
— cодержит информацию о моментальных метриках и кумулятивные счетчики операций. К первым относятся, например, данные о нагрузке на CPU или количестве выполняемых транзакций. Ко вторым — общее количество прочитанных строк.
Предназначена для выявления различных неравномерностей в нагрузке на партицию или отображения размера данных в ней.
Кумулятивные поля (RowReads
, RowUpdates
и т.д.) хранят накопленные значения с момента последнего старта таблетки, обслуживающей партицию.
Структура таблицы:
Поле | Описание |
---|---|
OwnerId |
Идентификатор SchemeShard, обслуживающего таблицу. Тип: Uint64 .Ключ: 0 . |
PathId |
Идентификатор пути в SchemeShard. Тип: Uint64 .Ключ: 1 . |
PartIdx |
Порядковый номер партиции. Тип: Uint64 .Ключ: 2 . |
DataSize |
Приблизительный размер партиции в байтах. Тип: Uint64 . |
RowCount |
Приблизительное количество строк. Тип: Uint64 . |
IndexSize |
Размер индекса партиции в таблетке. Тип: Uint64 . |
CPUCores |
Double Моментальное значение нагрузки на партицию (доля ядра) |
TabletId |
Идентификатор таблетки, обслуживающей партицию. Тип: Uint64 . |
Path |
Полный путь к таблице. Тип: Utf8 . |
NodeId |
Идентификатор ноды, на которой в данный момент обслуживается партиция. Тип: Uint32 . |
StartTime |
Последний момент запуска таблетки, обслуживающей партицию. Тип: Timestamp . |
AccessTime |
Последний момент чтения из партиции. Тип: Timestamp . |
UpdateTime |
Последний момент записи в партицию. Тип: Timestamp . |
RowReads |
Количество точечных чтений с момента старта таблетки партиции. Тип: Uint64 . |
RowUpdates |
Количество записанных строк с момента старта. Тип: Uint64 . |
RowDeletes |
Количество удалённых строк с момента старта. Тип: Uint64 . |
RangeReads |
Количество чтений диапазонов строк с момента старта. Тип: Uint64 . |
RangeReadRows |
Количество строк, прочитанных в диапазонах с момента старта. Тип: Uint64 . |
InFlightTxCount |
Количество транзакций, находящихся в процессе исполнения. Тип: Uint64 . |
ImmediateTxCompleted |
Количество завершившихся одношардовых транзакций с момента старта. Тип: Uint64 . |
CoordinatedTxCompleted |
Количество завершившихся координируемых транзакций с момента старта. Тип: Uint64 . |
TxRejectedByOverload |
Количество транзакций, отменённых по причине слишком высокой нагрузки (с момента старта). Тип: Uint64 . |
TxRejectedByOutOfStorage |
Количество транзакций, отменённых из-за нехватки места (с момента старта). Тип: Uint64 . |
Примеры запросов
Топ-5 самых загруженных партиций среди всех таблиц базы данных:
SELECT
Path,
PartIdx,
CPUCores
FROM `.sys/partition_stats`
ORDER BY CPUCores DESC
LIMIT 5
Список таблиц базы с размерами и нагрузкой в моменте:
SELECT
Path,
COUNT(*) as Partitions,
SUM(RowCount) as Rows,
SUM(DataSize) as Size,
SUM(CPUCores) as CPU
FROM `.sys/partition_stats`
GROUP BY 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 . |
Rank |
Ранг запроса в топе. Тип: Uint32 .Ключ: 1 . |
QueryText |
Текст запроса. Тип: Utf8 . |
Duration |
Полное время исполнения запроса. Тип: Interval . |
EndTime |
Момент окончания исполнения запроса. Тип: 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 = (
SELECT
MAX(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 . |
Примеры запросов
Топ-10 запросов за последние 6 часов по общему количеству записанных строк в минутном интервале:
SELECT
SumUpdateRows,
Count,
QueryText,
IntervalEnd
FROM `.sys/query_metrics_one_minute`
ORDER BY SumUpdateRows DESC LIMIT 10
Недавние запросы, прочитавшие больше всего байт за минуту:
SELECT
IntervalEnd,
SumReadBytes,
MinReadBytes,
SumReadBytes / Count as AvgReadBytes,
MaxReadBytes,
QueryText
FROM `.sys/query_metrics_one_minute`
WHERE SumReadBytes > 0
ORDER BY 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 . |
TabletId |
Идентификатор таблетки, обслуживающей партицию. Тип: Uint64 . |
Path |
Полный путь к таблице. Тип: Utf8 . |
PeakTime |
Момент пикового значения в пределах интервала. Тип: Timestamp . |
CPUCores |
Пиковое значение нагрузки на партицию (доля ядра). Тип: Double . |
NodeId |
Идентификатор ноды, на которой находилась партиция в момент пика. Тип: Uint32 . |
DataSize |
Приблизительный размер партиции в байтах в момент пика. Тип: Uint64 . |
RowCount |
Приблизительное количество строк в момент пика. Тип: Uint64 . |
IndexSize |
Размер индекса партиции в таблетке в момент пика. Тип: Uint64 . |
InFlightTxCount |
Количество транзакций, находящихся в процессе исполнения в момент пика. Тип: Uint32 . |
Примеры запросов
Следующий запрос выводит партиции с потреблением CPU более 70% в указанном интервале времени, с идентификаторами таблеток и их размерами на момент превышения. Запрос выполняется к таблице .sys/top_partitions_one_minute
, которая содержит данные за последние 6 часов с разбиением по часовым интервалам:
SELECT
IntervalEnd,
CPUCores,
Path,
TabletId,
DataSize
FROM `.sys/top_partitions_one_minute`
WHERE CPUCores > 0.7
AND IntervalEnd BETWEEN Timestamp("YYYY-MM-DDThh:mm:ss.uuuuuuZ") AND Timestamp("YYYY-MM-DDThh:mm:ss.uuuuuuZ")
ORDER BY IntervalEnd desc, CPUCores desc
"YYYY-MM-DDTHH:MM:SS.UUUUUUZ"
— время в зоне UTC 0 (YYYY
— год,MM
— месяц,DD
— число,hh
— часы,mm
— минуты,ss
— секунды,uuuuuu
— микросекунды). Например,"2023-01-26T13:00:00.000000Z"
.
Следующий запрос выводит партиции с потреблением CPU более 90% в указанном интервале времени, с идентификаторами таблеток и их размерами на момент превышения. Запрос выполняется к таблице .sys/top_partitions_one_hour
, которая содержит данные за последние 2 недели с разбиением по минутным интервалам:
SELECT
IntervalEnd,
CPUCores,
Path,
TabletId,
DataSize
FROM `.sys/top_partitions_one_hour`
WHERE CPUCores > 0.9
AND IntervalEnd BETWEEN Timestamp("YYYY-MM-DDThh:mm:ss.uuuuuuZ") AND Timestamp("YYYY-MM-DDThh:mm:ss.uuuuuuZ")
ORDER BY IntervalEnd desc, CPUCores desc
"YYYY-MM-DDTHH:MM:SS.UUUUUUZ"
— время в зоне UTC 0 (YYYY
— год,MM
— месяц,DD
— число,hh
— часы,mm
— минуты,ss
— секунды,uuuuuu
— микросекунды). Например,"2023-01-26T13:00:00.000000Z"
.