Системные таблицы базы данных

Вы можете отправлять запросы в специальные служебные таблицы (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".
Предыдущая
Следующая