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