---
metadata:
  - name: generator
    content: Diplodoc Platform v5.56.0
alternate:
  - https://ydb.tech/docs/en/yql/reference/syntax/alter_table/compact.md?version=main
  - https://ydb.tech/docs/ru/yql/reference/syntax/alter_table/compact.md?version=main
  - href: ru/yql/reference/syntax/alter_table/compact.md
    type: text/markdown
    title: Markdown version
  - href: ../../../../llms.txt
    type: text/markdown
    title: llms.txt
sourcePath: ru/core/yql/reference/syntax/alter_table/compact.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ydb.tech/docs/ru/llms.txt

# Запуск принудительного компакшена таблицы

```yql
ALTER TABLE table_name COMPACT [WITH (key = value [, ...])];
```


<!-- source: ru/_includes/only_allow_for_oltp_note.md -->
{% note warning %}

<!-- source: ru/_includes/only_allow_for_oltp_text.md -->
Поддерживается только для [строковых](https://ydb.tech/docs/ru/concepts/datamodel/table.md?version=main#row-oriented-tables) таблиц.
<!-- endsource: ru/_includes/only_allow_for_oltp_text.md -->

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


YDB автоматически производит [компакшен](https://ydb.tech/docs/ru/concepts/glossary.md?version=main#compaction) таблиц и обычно не требует ручного вмешательства.
Однако, при помощи команды `ALTER TABLE ... COMPACT` можно явно запустить компакшен данных заданной таблицы, не дожидаясь автоматического уплотнения. Команда полезна, например, в следующих сценариях:

* было выполнено массовое удаление данных и хочется быстрее освободить занимаемое место;
* были изменены настройки сжатия или [групп колонок](https://ydb.tech/docs/ru/yql/reference/syntax/alter_table/family.md?version=main), и хочется быстрее применить их к уже существующим данным.

Команда создаёт фоновую операцию и синхронно ждёт её завершения. Ожидание можно прервать, тогда операция продолжит выполняться в фоне. Управлять фоновыми операциями компакшена можно через [CLI](https://ydb.tech/docs/ru/reference/ydb-cli/index.md?version=main) и [YDB UI](https://ydb.tech/docs/ru/reference/ydb-ui/index.md?version=main).

## Параметры {#options}

В блоке `WITH` можно указать следующие параметры:

* `CASCADE` — компактить ли вместе с таблицей её [вторичные индексы](https://ydb.tech/docs/ru/yql/reference/syntax/alter_table/indexes.md?version=main). Допустимые значения: `TRUE` и `FALSE`. Значение по умолчанию — `FALSE` (компактится только сама таблица).
* `PARALLEL` — максимальное число партиций, которые могут одновременно компактиться в рамках этой операции. Допустимые значения — положительные целые числа. Значение по умолчанию — 1. Общий лимит на одновременно работающие ручные компакшены для всей базы задаётся отдельно в конфигурации кластера YDB.

## Поведение {#behavior}

* За ходом запущенных операций компакшена можно следить с помощью [CLI-команды](https://ydb.tech/docs/ru/reference/ydb-cli/operation-list.md?version=main) `ydb operation list compaction`. С помощью соответствующих команд можно [получить статус конкретной операции](https://ydb.tech/docs/ru/reference/ydb-cli/operation-get.md?version=main), [отменить операцию](https://ydb.tech/docs/ru/reference/ydb-cli/operation-cancel.md?version=main) или [удалить запись завершённой операции](https://ydb.tech/docs/ru/reference/ydb-cli/operation-forget.md?version=main).
* Также просматривать операции и управлять ими можно с помощью [YDB UI](https://ydb.tech/docs/ru/reference/ydb-ui/index.md?version=main). Для этого нужно перейти на страницу базы данных, открыть вкладку `Operations` и выбрать на ней тип операции `Compaction`.
* Если для той же таблицы (либо для одного из её вторичных индексов при `CASCADE = TRUE`) уже выполняется операция компакшена, запуск завершится с ошибкой. Нужно либо дождаться завершения предыдущей операции, либо отменить её.
* Для запуска команды требуются те же права, что и для остальных действий `ALTER TABLE`. Параллельные изменения схемы таблицы при этом не блокируются.
* Принудительный компакшен также материализует заимствованные данные. В результате общий объём данных в базе может увеличиться. Механизм заимствования используется, например, для реализации [CoW](https://ru.wikipedia.org/wiki/Копирование_при_записи) [копирования таблиц](https://ydb.tech/docs/ru/reference/ydb-cli/tools-copy.md?version=main), поэтому при выполнении компакшена скопированных таблиц их объём в пределе может увеличиться на размер исходной таблицы.

## Примеры {#examples}

Запустить компакшен только основной таблицы:

```yql
ALTER TABLE series COMPACT;
```

Запустить компакшен таблицы вместе со всеми её вторичными индексами:

```yql
ALTER TABLE series COMPACT WITH (CASCADE = TRUE);
```

Запустить компакшен только impl-таблицы конкретного вторичного индекса:

```yql
ALTER TABLE `series/idx_release/indexImplTable` COMPACT;
```

Запустить компакшен таблицы, установив число одновременно обрабатываемых партиций:

```yql
ALTER TABLE series COMPACT WITH (PARALLEL = 5);
```
