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

# Изменение конфигурации актор-системы


Актор-система — основа YDB, каждый компонент системы представляется одним или несколькими акторами.
Каждый актор распределен в определенный ExecutorPool, соответствующий задаче актора.
Изменение конфигурации поможет более точно распределить количество зарезервированных ядер для каждого типа задач.

## Описание конфига актор-системы

Конфиг актор-системы состоит из перечисления ExecutorPool'ов, сопоставления ExecutorPool с видами задач и конфигураций шедулера актор-системы.

На данный момент есть следующие типы задач и соответствующие им пулы:

* System - предназначен для выполнения быстрых внутренних операций YDB;
* User - включает в себя всю пользовательскую нагрузку по обработке и выполнению входящих запросов;
* Batch - задачи, которые не имеют строгого лимита на время выполнения, в основном выполнение фоновых операций;
* IO - отвечает за выполнение всех задач с блокирующими операциями (как пример запись логов в файл);
* IC - Interconnect, включает всю нагрузку связанную с коммуникацией между узлами.

Каждый пул описывается полем Executor, как в примере ниже.

```proto
Executor {
  Type: BASIC
  Threads: 9
  SpinThreshold: 1
  Name: "System"
}
```

Описание основных полей:

* **Type** - на данный момент может иметь два типа: **BASIC** и **IO**. Все пулы, кроме **IO**, имеют тип **BASIC**;
* **Threads** - количество потоков (количество параллельно работающих акторов) в данном пуле;
* **SpinThreshold** - количество тактов процессора перед уходом в сон при отсутствии задач, которое будет исполнять поток, выполняющий работу акторов (влияет на потребление cpu и latency запросов во время слабой нагрузки);
* **Name** - название пула, которое будет отображаться у узла в мониторинге.

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

Список полей с их задачами:

* **SysExecutor** - System
* **UserExecutor** - User
* **BatchExecutor** - Batch
* **IoExecutor** - IO

Пример:

```proto
SysExecutor: 0
UserExecutor: 1
BatchExecutor: 2
IoExecutor: 3
```

IC пул задается другим способом, через ServiceExecutor, как в примере ниже.

```proto
ServiceExecutor {
  ServiceName: "Interconnect"
  ExecutorId: 4
}
```

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

* **Resolution** - минимальный шаг смещения времени в микросекундах;
* **SpinThreshold** - аналогично с параметром пула, количество тактов процессора перед уходом в сон при отсутствии сообщений;
* **ProgressThreshold** - максимальный шаг смещения времени в микросекундах.

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

Не рекомендуется менять конфиг шедулера. В конфигах пулов рекомендуется менять только количество потоков.

Пример конфига актор-системы по умолчанию:

```proto
Executor {
  Type: BASIC
  Threads: 9
  SpinThreshold: 1
  Name: "System"
}
Executor {
  Type: BASIC
  Threads: 16
  SpinThreshold: 1
  Name: "User"
}
Executor {
  Type: BASIC
  Threads: 7
  SpinThreshold: 1
  Name: "Batch"
}
Executor {
  Type: IO
  Threads: 1
  Name: "IO"
}
Executor {
  Type: BASIC
  Threads: 3
  SpinThreshold: 10
  Name: "IC"
  TimePerMailboxMicroSecs: 100
}
SysExecutor: 0
UserExecutor: 1
IoExecutor: 3
BatchExecutor: 2
ServiceExecutor {
  ServiceName: "Interconnect"
  ExecutorId: 4
}
```

## На статических узлах

Статические узлы берут конфигурацию актор-системы из файла `/opt/ydb/cfg/config.yaml`.

После замены конфигурации требуется перезапустить узел.

## На динамических узлах

Динамические узлы берут конфигурацию из [CMS](https://ydb.tech/docs/ru/devops/configuration-management/configuration-v1/cms.md?version=v26.1), чтобы изменить ее, можно воспользоваться следующей командой:

```proto
ConfigureRequest {
  Actions {
    AddConfigItem {
      ConfigItem {
        // UsageScope: { ... }
        Config {
          ActorSystemConfig {
            <конфиг актор-системы>
          }
        }
        MergeStrategy: 3
      }
    }
  }
}

```bash
ydbd -s <endpoint> admin console execute --domain=<domain> --retry=10 actorsystem.txt
```
