Системные представления кластера
Для возможности внутренней интроспекции состояния кластера пользователю предоставляется возможность осуществлять запросы в специальные служебные представления (system views). Эти представления доступны из корневой директории кластера и используют системный префикс пути .sys
.
Пользователи облачных баз данных обычно не имеют доступа к системным представлениям кластера, так как за его поддержку и своевременную диагностику отвечает команда облака.
В описаниях доступных полей далее по тексту колонка Ключ содержит индекс поля первичного ключа соответствующего представления.
Примечание
Аналогичные системные представления существуют и для происходящего внутри конкретной базы данных, они описаны в отдельной статье для DBA.
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.