---
metadata:
  - name: generator
    content: Diplodoc Platform v5.56.0
alternate:
  - https://ydb.tech/docs/en/contributor/load-actors-overview.md?version=v26.2
  - https://ydb.tech/docs/ru/contributor/load-actors-overview.md?version=v26.2
  - href: ru/contributor/load-actors-overview.md
    type: text/markdown
    title: Markdown version
  - href: ../llms.txt
    type: text/markdown
    title: llms.txt
sourcePath: ru/core/contributor/load-actors-overview.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ydb.tech/docs/ru/llms.txt

# Обзор тестирования с помощью нагружающих акторов

Тестирование производительности системы является важным этапом добавления изменений в ядро YDB. С помощью [нагрузочного тестирования](https://ru.wikipedia.org/wiki/Нагрузочное_тестирование) вы можете:

* определить показатели производительности и сравнить их со значениями до изменений;
* проверить работоспособность системы на высоких или пиковых нагрузках.

Сама по себе задача нагрузить высокопроизводительную распределенную систему является нетривиальной. Часто разработчику приходится запускать несколько инстансов клиента, чтобы добиться требуемой загрузки сервера. YDB реализует простой и удобный механизм подачи нагрузки — нагружающие акторы. Акторы создаются и запускаются в самом кластере, таким образом не нужно привлекать дополнительные ресурсы для запуска клиентов. Нагружающие акторы могут быть запущены на произвольных узлах кластера — на одном, на всех или только на выбранных. Вы можете создать любое количество акторов на любом из узлов.

Нагружающие акторы позволяют тестировать как систему в целом, так отдельные ее компоненты:

![load-actors](../_assets/load-actors.svg)

Например, вы можете подать [нагрузку на Distributed Storage](https://ydb.tech/docs/ru/contributor/load-actors-storage.md?version=v26.2) без задействования слоев таблеток и Query Processor. Таким образом можно изолированно тестировать отдельные слои системы и эффективно находить узкие места. Комбинация акторов разных типов позволяет запускать множество видов нагрузки.

<!-- source: ru/_includes/trunk.md -->
{% note info %}

Функциональность находится в разработке, исходный код доступен в ветке _main_ [репозитория YDB](https://github.com/ydb-platform/ydb). О том, как собрать YDB из исходного кода, читайте в [инструкции](https://github.com/ydb-platform/ydb/blob/main/BUILD.md).

{% endnote %}
<!-- endsource: ru/_includes/trunk.md -->

## Типы акторов {#load-actor-type}

| Тип                                             | Описание                                                                           |
|-------------------------------------------------|------------------------------------------------------------------------------------|
| [KqpLoad](load-actors-kqp.md)                   | Подает нагрузку на слой Query Processor и нагружает все компоненты кластера.       |
| [KeyValueLoad](load-actors-key-value.md)        | Нагружает Key-value таблетку.                                                      |
| [StorageLoad](load-actors-storage.md)           | Нагружает Distributed Storage без задействования слоев таблеток и Query Processor. |
| [VDiskLoad](load-actors-vdisk.md)               | Тестирует производительность записи на VDisk.                                      |
| [PDiskWriteLoad](load-actors-pdisk-write.md)                           | Тестирует производительность записи на PDisk.                                      |
| [PDiskReadLoad](load-actors-pdisk-read.md)      | Тестирует производительность чтения с PDisk.                                       |
| [PDiskLogLoad](load-actors-pdisk-log.md)        | Тестирует корректность вырезания из середины лога PDisk.                           |
| [MemoryLoad](load-actors-memory.md)             | Аллоцирует память, полезен при тестировании логики.                                |
| [Stop](load-actors-stop.md)                     | Останавливает все акторы, либо только указанные.                                   |

## Запуск нагрузки {#load-actor-start}

Запустить нагрузку можно с помощью следующих инструментов:

* Embedded UI кластера — позволяет создать по конфигурации и запустить нагружающий актор либо на текущем узле, либо сразу на всех узлах тенанта.
* Утилита `ydbd` — позволяет на любой узел кластера отправить конфигурацию актора с указанием, на каких узлах необходимо создать и запустить актор.

В качестве примера рассмотрим создание и запуск актора KqpLoad. Актор обращается к БД `/slice/db` как к key-value хранилищу в 64 потока, длительность нагрузки — 30 секунд. Перед началом работы актор создает необходимые таблицы, после окончания удаляет их. При создании актору будет автоматически присвоен тег. Этот же тег будет присвоен и результату теста.

{% list tabs group=tool %}

- Embedded UI

    1. Откройте страницу управления нагружающими акторами на узле (например, `http://<address>:8765/actors/load`, где `address` — адрес узла кластера, на котором нужно запустить нагрузку).
    2. В поле ввода/вывода вставьте конфигурацию актора:

    ```proto
    KqpLoad: {
        DurationSeconds: 30
        WindowDuration: 1
        WorkingDir: "/slice/db"
        NumOfSessions: 64
        UniformPartitionsCount: 1000
        DeleteTableOnFinish: 1
        WorkloadType: 0
        Kv: {
            InitRowCount: 1000
            PartitionsByLoad: true
            MaxFirstKey: 18446744073709551615
            StringLen: 8
            ColumnsCnt: 2
            RowsCnt: 1
        }
    }
    ```

    3. Чтобы создать и запустить актор, нажмите кнопку:

        * **Start new load on current node** — нагрузка будет запущена на текущем узле.
        * **Start new load on all tenant nodes** — нагрузка будет запущена на всех узлах тенанта.

    В поле ввода/вывода появится следующее сообщение:

    ```text
    {"status":"OK","tag":1}
    ```

    * `status` — статус запуска нагрузки;
    * `tag` — тег, который был присвоен нагрузке.

- CLI

    1. Создайте файл с конфигурацией актора:

    ```proto
    KqpLoad: {
        DurationSeconds: 30
        WindowDuration: 1
        WorkingDir: "/slice/db"
        NumOfSessions: 64
        UniformPartitionsCount: 1000
        DeleteTableOnFinish: 1
        WorkloadType: 0
        Kv: {
            InitRowCount: 1000
            PartitionsByLoad: true
            MaxFirstKey: 18446744073709551615
            StringLen: 8
            ColumnsCnt: 2
            RowsCnt: 1
        }
    }
    ```

    2. Запустите актор:

    ```bash
    curl <endpoint>/actors/load -H "Content-Type: application/x-protobuf-text" --data mode=start --data all_nodes=<start_on_all_nodes> --data config="$(cat proto_file)"
    ```

    * `endpoint` — http-эндпоит узла (например, `http://<address>:<port>`, где `address` — адрес узла, `port` — http-порт узла).
    * `proto_file` — путь к файлу с конфигурацией актора.
    * `start_on_all_nodes` – `true`, чтобы запустить нагрузку на всех узлах тенанта, `false`, чтобы запустить нагрузку только на узле с данным `endpoint`.

{% endlist %}

## Просмотр результата тестирования {#view-results}

Результаты тестирования можно просмотреть с помощью Embedded UI. Описание выводимых параметров смотрите в документации соответствующего актора.

{% list tabs group=tool %}

- Embedded UI

    1. Откройте страницу управления нагружающими акторами на узле (например, `http://<address>:<port>/actors/load`, где `address` — адрес узла, `port` — http-порт мониторинга узла, на котором была запущена нагрузка).
    2. Нажмите кнопку **Results**.

        Будут отображены результаты завершенных тестирований. Найдите результат с соответствующим тегом.

        ![load-actors-finished-tests](../_assets/load-actors-finished-tests.png)

{% endlist %}

<!-- source: ru/contributor/_includes/career.md -->
{% note tip "Хотите присоединиться к команде разработки YDB?" %}

Ознакомьтесь с разделами о [команде YDB и открытых вакансиях](https://ydb.tech/ru/careers/), а также о [возможностях для студентов](https://ydb.tech/ru/students/).

{% endnote %}
<!-- endsource: ru/contributor/_includes/career.md -->