Системные таблицы кластера

Для возможности внутренней интроспекции состояния кластера пользователю предоставляется возможность осуществлять запросы в специальные служебные таблицы (system views). Эти таблицы доступны из корневой директории кластера и используют системный префикс пути .sys.

Пользователи облачных баз данных обычно не имеют доступа к системным таблицам кластера, так как за его поддержку и своевременную диагностику отвечает команда облака.

В описаниях доступных полей далее по тексту колонка Ключ содержит индекс поля первичного ключа соответствующей таблицы.

Distributed Storage

Информация о работе распределённого хранилища содержится в нескольких взаимосвязанных таблицах, каждая из которых отвечает за описание своей сущности, а именно:

  • PDisk
  • VSlot
  • Group
  • Storage Pool

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

ds_pdisks

Поле Тип Ключ Значение
NodeId Uint32 0 Идентификатор узла, на котором запущен PDisk
PDiskId Uint32 1 Идентификатор PDisk (уникален внутри узла)
Type String Тип носителя (ROT, SSD, NVME)
Kind Uint64 Числовой идентификатор, задаваемый пользователем, который нужен для объединения дисков с одинаковым типом носителя в разные подгруппы
Path String Путь к блочному устройству внутри машины
Guid Uint64 Уникальный идентификатор, генерируемый случайно при добавлении диска в систему, предназначенный для предотвращения потери данных в случае перемены дисков местами
BoxId Uint64 Идентификатор Box, в который входит данный PDisk
SharedWithOs Bool Наличие метки "SharedWithOs", устанавливаемой вручную при создании PDisk. Может использоваться для фильтрации дисков при создании новых групп.
ReadCentric Bool Наличие метки "ReadCentric", устанавливаемой вручную при создании PDisk. Может использоваться для фильтрации дисков при создании новых групп.
AvailableSize Uint64 Число доступных для выделения байт на PDisk
TotalSize Uint64 Общее число байт на PDisk
Status String Режим работы PDisk, который влияет на его участие в выделении групп (ACTIVE, INACTIVE, BROKEN, FAULTY, TO_BE_REMOVED)
StatusChangeTimestamp Timestamp Время, когда последний раз поменялся Status; если NULL, то Status не менялся с момента создания PDisk
ExpectedSlotCount Uint32 Максимальное число слотов (VSlot), которое может быть создано на этом PDisk
NumActiveSlots Uint32 Количество работающих слотов в настоящий момент

ds_vslots

Поле Тип Ключ Значение
NodeId Uint32 0 Идентификатор узла, на котором запущен VSlot
PDiskId Uint32 1 Идентификатор PDisk внутри узла, на котором запущен VSlot
VSlotId Uint32 2 Идентификатор VSlot внутри PDisk
GroupId Uint32 Номер группы хранения, в которую входит данный VSlot
GroupGeneration Uint32 Поколение конфигурации группы хранения, в которую входит данный VSlot
FailRealm Uint32 Относительный номер группы отказа (fail realm) VSlot внутри группы хранения
FailDomain Uint32 Относительный номер домена отказа (fail domain) VSlot внутри группы отказа (fail realm)
VDisk Uint32 Относительный номер VSlot внутри домена отказа (fail domain)
AllocatedSize Uint64 Число байт, которые VSlot занимает на PDisk
AvailableSize Uint64 Число байт, доступных для выделения данному VSlot
Status String Состояние запущенного VDisk в данном VSlot (INIT_PENDING, REPLICATING, READY, ERROR)
Kind String Предустановленная настройка режима работы VDisk (Default, Log, ...)

Стоит заметить, что кортеж (NodeId, PDiskId) формируют внешний ключ к таблице ds_pdisks, а (GroupId) -- к таблице ds_groups.

ds_groups

Поле Тип Ключ Значение
GroupId Uint32 0 Номер группы хранения в кластере
Generation Uint32 Поколение конфигурации группы хранения
ErasureSpecies String Режим кодирования избыточности для группы (block-4-2, mirror-3-dc, mirror-3of4, ...)
BoxId Uint64 Идентификатор Box, в котором создана данная группа
StoragePoolId Uint64 Идентификатор пула хранения внутри Box, в рамках которого работает данная группа
EncryptionMode Uint32 Наличие шифрования данных в группе и алгоритм шифрования, если оно включено
LifeCyclePhase Uint32 Наличие выработанного ключа шифрования, если шифрование включено
AllocatedSize Uint64 Количество выделенных байт данных в группе (приводится к пользовательским байтам, то есть до избыточности)
AvailableSize Uint64 Количество доступных для выделения байт пользовательских данных (также до избыточности)
SeenOperational Bool Булевой флаг, показывающий, была ли группа в рабочем состоянии после её создания
PutTabletLogLatency Interval 90 процентиль времени выполнения запроса PutTabletLog
PutUserDataLatency Interval 90 процентиль времени выполнения запроса PutUserData
GetFastLatency Interval 90 процентиль времени выполнения запроса GetFast

В данной таблице кортеж (BoxId, StoragePoolId) формирует внешний ключ к таблице ds_storage_pools.

ds_storage_pools

Поле Тип Ключ Значение
BoxId Uint64 0 Идентификатор Box, в который входит данный пул хранения
StoragePoolId Uint64 1 Идентификатор пула хранения внутри Box
Name String Название пула хранения, задаваемое пользователем (используется при связывании таблеток и пулов хранения)
Generation Uint64 Поколение конфигурации пула хранения (количество изменений)
ErasureSpecies String Режим кодирования избыточности для всех групп внутри данного пула хранения
VDiskKind String Предустановленная настройка режима работы всех VDisk для данного пула хранения
Kind String Строковое описание предназначения пула, задаваемое пользователем, также может использоваться для фильтрации
NumGroups Uint32 Количество групп внутри данного пула хранения
EncryptionMode Uint32 Настройка шифрования данных для всех групп (аналогично ds_groups.EncryptionMode)
SchemeshardId Uint64 Идентификатор SchemeShard объекта схемы, к которому относится данный пул хранения (сейчас всегда NULL)
PathId Uint64 Идентификатор узла объекта схемы внутри указанного SchemeShard, к которому относится данный пул хранения

ds_storage_stats

В отличие от других таблиц, показывающих физические сущности, таблица ds_storage_stats показывает агрегированную информацию о хранилище.

Поле Тип Ключ Значение
BoxId Uint64 0 Идентификатор Box, по которому считается статистика
PDiskFilter String 1 Строковое описание фильтров, отбирающих PDisk для создания групп (например, по типу носителя)
ErasureSpecies String 2 Режим кодирования избыточности, по которому собирается статистика
CurrentGroupsCreated Uint32 Число созданных групп с указанными характеристиками
CurrentAllocatedSize Uint64 Суммарное занятое место по всем группам, входящим в CurrentGroupsCreated
CurrentAvailableSize Uint64 Суммарное доступное для выделения место по всем группам, входящим в CurrentGroupsCreated
AvailableGroupsToCreate Uint32 Число групп с указанными характеристиками, которое можно создать с учётом необходимости резерва
AvailableSizeToCreate Uint64 Число доступных байт, которое получится при создании всех групп из AvailableGroupsToCreate

Здесь стоит заметить, что AvailableGroupsToCreate показывают максимальное количество групп, которое можно создать, если не создавать другие виды групп. Таким образом, при расширении одного пула хранения могут поменяться числа AvailableGroupsToCreate в нескольких строках статистики.

Замечания

Следует иметь в виду, что обращение к системным таблицам имеет скорее аналитический характер нагрузки, и поэтому частое обращение к ним в больших базах будет существенно расходовать системные ресурсы. Нагрузка порядка 1-2 rps вполне допустима.