---
metadata:
  - name: generator
    content: Diplodoc Platform v5.50.4
alternate:
  - https://ydb.tech/docs/en/reference/ydb-cli/workload-transfer.md
  - https://ydb.tech/docs/ru/reference/ydb-cli/workload-transfer.md
sourcePath: ru/core/reference/ydb-cli/workload-transfer.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ydb.tech/docs/ru/llms.txt

# Transfer нагрузка

Запускает нагрузку в виде транзакций YDB, в которых участвуют топик и таблица. Данные вычитываются из топика и записываются в таблицу. Для имитации реальной нагрузки можно задавать различные входные параметры: число сообщений, размер сообщений, целевую скорость записи, число читателей и писателей, число партиций. В процессе работы на консоль выводятся результаты: количество записанных сообщений, скорость записи сообщений и т.д.

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

В примерах используется профиль `quickstart`, подробнее смотрите в [Создание профиля для соединения с тестовой БД](https://ydb.tech/docs/ru/reference/ydb-cli/profile/create.md#quickstart).

{% endnote %}
<!-- endsource: ru/_includes/ydb-cli-profile.md -->

## Инициализация тестового окружения {#init}

Перед запуском нагрузки необходимо инициализировать тестовое окружение. Для этого можно использовать команду `ydb workload transfer topic-to-table init`. Она создаст топик и таблицу с нужными параметрами.

Общий вид команды:

```bash
ydb [global options...] workload transfer topic-to-table init [options...]
```

* `global options` — [глобальные параметры](https://ydb.tech/docs/ru/reference/ydb-cli/commands/global-options.md).
* `options` - параметры подкоманды.

Посмотреть описание команды:

```bash
ydb workload transfer topic-to-table init --help
```

Параметры подкоманды:
Имя параметра        | Описание параметра          | Значение по умолчанию
---|---|---
`--topic`            | Имя топика                  | `transfer-topic`
`--consumer-prefix`  | Префикс имени читателей     | `workload-consumer`
`--table`            | Имя таблицы                 | `transfer-table`
`--consumers`        | Количество читателей топика | `1`
`--topic-partitions` | Количество партиций топика  | `128`
`--table-partitions` | Количество партиций таблицы | `128`

После выполнения подкоманды `init` будут созданы таблица, топик и читатели. Имена читателей создаются по правилу `${CONSUMER_PREFIX}-${INDEX}`. Значение `${INDEX}` — это целое число от 0 и до значения параметра `--consumers` минус 1.

Например, команда

```bash
ydb --profile quickstart workload transfer topic-to-table init --consumers 2 --topic-partitions 143 --table-partitions 237
```

создаст топик `transfer-topic` с 2 читателями и 143 партициями и таблицу `transfer-table` с 237 партициями. Имена читателей `workload-consumer-0` и `workload-consumer-1`.

## Запуск нагрузочного теста {#run}

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

Во время работы программы имитируются рабочие потоки двух видов:

* Входной поток: в топик пишутся сообщения в режиме без транзакций. Пользователь может управлять скоростью записи, размером сообщений, количеством писателей.
* Поток обработки: из топика читаются сообщения и записываются в таблицу с использованием транзакций YDB.

В рамках одной транзакции в потоке обработки выполняются следующие действия:

* пока не истёк период `--commit-period`, читаются сообщения из топика;
* по истечении периода, выполняется одна команда `UPSERT` над таблицей и команда `COMMIT` для фиксации транзакции.

Общий вид команды:

```bash
ydb [global options...] workload transfer topic-to-table run [options...]
```

* `global options` — [глобальные параметры](https://ydb.tech/docs/ru/reference/ydb-cli/commands/global-options.md).
* `options` - параметры подкоманды.

Посмотреть описание команды:

```bash
ydb workload transfer topic-to-table run --help
```

Параметры подкоманды:

Имя параметра              | Описание параметра          | Значение по умолчанию
---|---|---
`--seconds`, `-s`          | Продолжительность теста в секундах            | `60`
`--window`, `-w`           | Длительность окна сбора статистики в секундах | `1`
`--quiet`, `-q`            | Выводить только итоговый результат теста      | `0`
`--print-timestamp`        | Печатать время вместе со статистикой каждого временного окна | `0`
`--percentile`             | Процентиль в выводе статистики                | `50`
`--warmup`                 | Время прогрева теста в секундах. В течение этого времени не вычисляется статистика, оно необходимо для устранения переходных процессов при старте | `5`
`--topic`                  | Имя топика | `transfer-topic`
`--consumer-prefix`        | Префикс имени читателей | `workload-consumer`
`--table`                  | Имя таблицы | `transfer-table`
`--producer-threads`, `-p` | Количество потоков писателей | `1`
`--consumer-threads`, `-t` | Количество потоков читателей | `1`
`--consumers`, `-c`        | Количество читателей | `1`
`--message-size`, `-m`     | Размер сообщения в байтах. Возможно задание в КБ, МБ, ГБ путем добавления суффиксов `K`, `M`, `G` соответственно | `10240`
`--message-rate`           | Целевая суммарная скорость записи. В сообщениях в секунду. Исключает использование параметра `--byte-rate` | `0`
`--byte-rate`              | Целевая суммарная скорость записи. В байтах в секунду. Исключает использование параметра `--message-rate`. Возможно задание в КБ/с, МБ/с, ГБ/с путем добавления суффиксов `K`, `M`, `G`, соответственно | `0`
`--tx-commit-interval`  | Период между вызовами `COMMIT` в транзакции. В миллисекундах | `1000`
`--tx-commit-messages` | Период между вызовами `COMMIT` в транзакции. В количестве сообщений | `1000000`
`--only-topic-in-tx`       | В транзакциях принудительно участвуют только партиции топиков. Исключает использование параметра `--only-table-in-tx` | `0`
`--only-table-in-tx`       | В транзакциях принудительно участвуют только шарды таблиц. Исключает использование параметра `--only-topic-in-tx` | `0`

Например, команда

```bash
ydb --profile quickstart workload transfer topic-to-table run
```

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

```text
Window  Write speed     Write time      Inflight        Read speed      Topic time      Select time     Upsert time     Commit time
#       msg/s   MB/s    percentile,ms   percentile,msg  msg/s   MB/s    percentile,ms   percentile,ms   percentile,ms   percentile,ms
1       0       0       0               0               0       0       0               0               0               0
2       0       0       0               0               0       0       0               0               0               0
3       0       0       0               0               0       0       0               0               0               0
4       0       0       0               0               0       0       0               0               0               0
5       0       0       0               0               0       0       0               0               0               0
6       103     1       1023            83              103     1       1025            0               0               0
7       103     1       999             78              103     1       1001            0               0               0
8       103     1       1003            93              103     1       1002            0               0               0
9       103     1       1003            88              103     1       1003            0               0               0
10      103     1       999             79              103     1       999             0               0               0
11      103     1       1119            89              0       0       0               0               0               0
12      103     1       1023            90              206     2       1028            90              223             695
13      103     1       975             84              103     1       976             0               0               0
14      103     1       1003            91              103     1       1006            0               0               0
15      103     1       1003            93              103     1       1005            0               0               0
16      103     1       1103            89              103     1       1100            0               0               0
17      103     1       1063            89              103     1       1061            0               0               0
...
```

* `Window` — порядковый номер временного окна сбора статистики.
* `Write speed` — скорость записи сообщений писателями. В сообщениях в секунду и в мегабайтах в секунду.
* `Write time` — процентиль времени записи сообщения в мс.
* `Inflight` — максимальное число сообщений, ожидающих подтверждения по всем партициям.
* `Lag` — максимальное число сообщений, ожидающих чтения, в окне сбора статистики. Учитываются сообщения по всем партициям.
* `Lag time` — процентиль времени задержки сообщений в мс.
* `Read speed` — скорость чтения сообщений читателями. В сообщениях в секунду и в мегабайтах в секунду.
* `Select time`, `Upsert time`, `Commit time` — процентиль времени выполнения операций Select, Upsert, Commit в мс.

## Удаление тестового окружения {#clean}

После завершения теста можно удалить тестовое окружение.

Общий вид команды:

```bash
ydb [global options...] workload transfer topic-to-table clean [options...]
```

* `global options` — [глобальные параметры](https://ydb.tech/docs/ru/reference/ydb-cli/commands/global-options.md).
* `options` - параметры подкоманды.

Посмотреть описание команды:

```bash
ydb workload transfer topic-to-table clean --help
```

Параметры подкоманды:

Имя параметра        | Описание параметра          | Значение по умолчанию
---|---|---
`--topic`            | Имя топика                  | `transfer-topic`
`--table`            | Имя таблицы                 | `transfer-table`

Например, команда

```bash
ydb --profile quickstart workload transfer topic-to-table clean
```

удалит топик `transfer-topic`, его читателей и таблицу `transfer-table`.
