---
metadata:
  - name: generator
    content: Diplodoc Platform v5.52.0
alternate:
  - https://ydb.tech/docs/en/devops/observability/system-views.md?version=v26.1
  - https://ydb.tech/docs/ru/devops/observability/system-views.md?version=v26.1
  - href: ru/devops/observability/system-views.md
    type: text/markdown
    title: Markdown version
  - href: ../../llms.txt
    type: text/markdown
    title: llms.txt
sourcePath: ru/core/devops/observability/system-views.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ydb.tech/docs/ru/llms.txt

# Системные представления кластера

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

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

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

{% note info %}

Аналогичные системные представления существуют и для происходящего внутри конкретной базы данных, они описаны в [отдельной статье для разработчиков](https://ydb.tech/docs/ru/dev/system-views.md?version=v26.1).

{% endnote %}

## Разграничение прав доступа

Возможность гибко настраивать права доступа к системным представлениям позволяет точно разграничить доступ к служебной информации и пользовательским данным.

### Типовые сценарии разграничения прав

- **Доступ только к системным представлениям:**
  Если в вашей инфраструктуре есть пользователи или сервисы, которым необходимо мониторить состояние кластера или базы — например, администраторы баз данных — но не требуется доступ к пользовательским данным, рекомендуется выдать этим пользователям права на чтение только для каталога `.sys`.

- **Доступ только к данным:**
  В ситуациях, когда отдельным пользователям или группам нужно скрыть информацию о служебных и системных объектах (например, аналитикам, которым не нужен доступ к внутренней диагностике), достаточно предоставить права на чтение только соответствующего каталога с пользовательскими данными. Права на каталог `.sys` или корень базы данных при этом выдавать не нужно — это гарантирует, что пользователи не увидят и не смогут запросить системные представления.

Дополнительно, поддерживается возможность назначения различных прав на отдельные системные представления — как для конкретных пользователей, так и для групп. Такой подход позволяет гибко реализовать принцип наименьших привилегий и контролировать разный уровень доступа к служебной информации для разных ролей и задач.

## Distributed Storage

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

* [PDisk](https://ydb.tech/docs/ru/concepts/glossary.md?version=v26.1#pdisk)
* [VSlot](https://ydb.tech/docs/ru/concepts/glossary.md?version=v26.1#slot)
* [Group](https://ydb.tech/docs/ru/concepts/glossary.md?version=v26.1#storage-group)
* [Storage Pool](https://ydb.tech/docs/ru/concepts/glossary.md?version=v26.1#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    |          | Количество занятых VSlot                                                                                                                                           |
| DecommitStatus        | String    |          | Статус вывода из эксплуатации ([декомиссии](../deployment-options/manual/decommissioning.md)) PDisk (`DECOMMIT_NONE`, `DECOMMIT_PENDING`, `DECOMMIT_IMMINENT`, `DECOMMIT_REJECTED`)                                                      |

### 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                                                           |
| OperatingStatus     | String   |          | Статус группы по последним отчетам VDisk (`UNKNOWN`, `FULL`, `PARTIAL`, `DEGRADED`, `DISINTEGRATED`)                 |
| ExpectedStatus      | String   |          | Статус, основанный не только на операционном отчете, но и на статусе PDisk и планах (`UNKNOWN`, `FULL`, `PARTIAL`, `DEGRADED`, `DISINTEGRATED`) |

В данном представлении кортеж `(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](../../concepts/glossary.md#scheme-shard) объекта схемы, к которому относится данный пул хранения (сейчас всегда `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` в нескольких строках статистики.

{% note info %}

Обращение к системным представлениям имеет скорее аналитический характер нагрузки. Частое обращение к ним в больших базах будет существенно расходовать системные ресурсы. Рекомендуемая нагрузка не более 1-2 RPS.

{% endnote %}
