[Документация Yandex Cloud](../../index.md) > [Yandex Managed Service for PostgreSQL](../index.md) > [Пошаговые инструкции](index.md) > Кластеры > Управление дисковым пространством

# Управление дисковым пространством

При заполнении [хранилища](../concepts/storage.md) более чем на 97% хост автоматически переходит в режим read-only. 
Чтобы избежать проблем с операциями записи в базу данных, воспользуйтесь одним из способов:


* [Настройте алерты в Yandex Monitoring](#set-alert), чтобы отслеживать степень заполнения хранилища.


* [Выведите кластер из режима read-only вручную](#read-only-solutions) и освободите место в хранилище, удалив часть данных.
* [Увеличьте размер хранилища](#change-disk-size), чтобы снять режим read-only автоматически. Вы также можете сменить тип диска.
* [Настройте автоматическое увеличение размера хранилища](#disk-size-autoscale).


## Настроить алерты в Yandex Monitoring {#set-alert}

1. Перейдите в сервис **Monitoring**.
1. Выберите сервисный дашборд **Managed Service for PostgreSQL**.
1. [Создайте канал уведомлений](../../monitoring/operations/alert/create-channel.md).
1. [Создайте алерт](../../monitoring/operations/alert/create-alert.md) со следующими параметрами:

    1. **Метрики** — задайте параметры метрики:

        * облако;
        * каталог;
        * сервис **Managed Service for PostgreSQL**;
        * идентификатор кластера Managed Service for PostgreSQL;

            Идентификатор кластера можно [получить со списком кластеров в каталоге](cluster-list.md#list-clusters).

        * метка `disk.free_bytes`.

    1. **Условия срабатывания** — задайте условие `Меньше или равно` для процента заполнения свободного дискового пространства, при котором сработает алерт:

        * **Функция агрегации** — `Минимум` (минимальное значение метрики за период).
        * **Warning** — `90` (90% от размера хранилища).
        * **Alarm** — `95` (95% от размера хранилища).
        * **Окно вычисления** — желаемый период, с которым будет обновляться значение метрики.

    1. Добавьте созданный ранее канал уведомлений.


## Вывести кластер из режима read-only вручную {#read-only-solutions}

{% note alert %}

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

{% endnote %}

Чтобы отключить режим read-only:

1. [Подключитесь к БД](connect/index.md) любым удобным способом.

1. Откройте транзакцию и внутри нее выполните команду:

    ```sql
    SET LOCAL transaction_read_only TO off;
    ```

1. В рамках этой же транзакции удалите ненужные данные с помощью операторов `DROP` или `TRUNCATE`. Не используйте оператор `DELETE` — при его использовании строки отмечаются как удаленные, но не удаляются из базы физически.

1. Зафиксируйте транзакцию и перезапустите все подключения к базе.

> Например, если ваша база содержит ненужную таблицу `ExcessDataTable1`, удалите ее с помощью транзакции:
>
> ```sql
> BEGIN;
> SET LOCAL transaction_read_only TO off;
> DROP TABLE ExcessDataTable1;
> COMMIT;
> ```

## Изменить тип диска и увеличить размер хранилища {#change-disk-size}

{% note info %}

Некоторые настройки PostgreSQL [зависят от размера хранилища](../concepts/settings-list.md#settings-instance-dependent).

{% endnote %}

Проверьте, что в облаке достаточно квот для увеличения хранилища. Откройте страницу [Квоты](https://kz.console.yandex.cloud/cloud?section=quotas) для облака и убедитесь, что в секции **Managed Databases** в строке **Объём HDD-хранилищ** или **Объём SSD-хранилищ** есть квота на объем хранилищ.

Когда размер хранилища изменяется, хосты кластера обновляются по одному в случайном порядке. Если во время обновления потребуется перезагрузка хоста, он станет недоступным на это время.

Перед обновлением хоста-мастера его роль берет на себя одна из реплик. Если вы используете для доступа к кластеру [FQDN](connect/fqdn.md) хоста-мастера, такой кластер может стать недоступным. Чтобы обеспечить бесперебойную работу приложения, при подключении перечислите все хосты кластера и укажите параметр `target_session_attrs=primary` или подключайтесь через [особый FQDN](connect/fqdn.md), всегда указывающий на текущий хост-мастер.

{% note info %}

Локальные SSD-диски могут незначительно увеличивать нагрузку на процессорные ядра хостов кластера.

{% endnote %}

{% list tabs group=instructions %}

- Консоль управления {#console}

    Чтобы изменить тип диска и увеличить размер хранилища для кластера:

    1. Перейдите в сервис **Managed Service for&nbsp;PostgreSQL**.
    1. Выберите кластер и нажмите кнопку ![image](../../_assets/console-icons/pencil.svg) **Редактировать** на панели сверху.
    1. В блоке **Размер хранилища**:

        * Выберите [тип диска](../concepts/storage.md).
        * Укажите нужный размер диска.

    1. Нажмите кнопку **Сохранить изменения**.

- CLI {#cli}

    Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), [установите и инициализируйте его](../../cli/quickstart.md#install).

    По умолчанию используется каталог, указанный при [создании](../../cli/operations/profile/profile-create.md) профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду `yc config set folder-id <идентификатор_каталога>`. Также для любой команды вы можете указать другой каталог с помощью параметров `--folder-name` или `--folder-id`. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.

    Чтобы изменить тип диска и увеличить размер хранилища для кластера:

    1. Посмотрите описание команды CLI для изменения кластера:

        ```bash
        yc managed-postgresql cluster update --help
        ```

    1. Укажите [тип диска](../concepts/storage.md) и нужный размер хранилища в команде изменения кластера (размер хранилища должен быть не меньше, чем значение `disk_size` в свойствах кластера):

        ```bash
        yc managed-postgresql cluster update <имя_или_идентификатор_кластера> \
            --disk-type <тип_диска> \
            --disk-size <размер_хранилища_ГБ>
        ```

- Terraform {#tf}

    Чтобы изменить тип диска и увеличить размер хранилища для кластера:

    1. Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.

        Инструкцию по созданию такого файла читайте в разделе [Создание кластера](cluster-create.md).

        Полный список доступных для изменения полей конфигурации кластера Managed Service for PostgreSQL вы найдете в [документации провайдера Terraform](../../terraform/resources/mdb_postgresql_cluster.md).

    1. Измените в описании кластера Managed Service for PostgreSQL значения атрибутов `disk_type_id` и `disk_size` в блоке `config.resources`:

        ```hcl
        resource "yandex_mdb_postgresql_cluster" "<имя_кластера>" {
          ...
          config {
            resources {
              disk_type_id = "<тип_диска>"
              disk_size    = <размер_хранилища_в_гигабайтах>
              ...
            }
          }
        }
        ```

    1. Проверьте корректность настроек.

        1. В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
        1. Выполните команду:
        
           ```bash
           terraform validate
           ```
        
           Если в файлах конфигурации есть ошибки, Terraform на них укажет.

    1. Подтвердите изменение ресурсов.

        1. Выполните команду для просмотра планируемых изменений:
        
           ```bash
           terraform plan
           ```
        
           Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
        
        1. Если вас устраивают планируемые изменения, внесите их:
           1. Выполните команду:
        
              ```bash
              terraform apply
              ```
        
           1. Подтвердите изменение ресурсов.
           1. Дождитесь завершения операции.

        {% note warning "Ограничения по времени" %}
        
        Провайдер Terraform ограничивает время на выполнение операций с кластером Managed Service for PostgreSQL:
        
        * создание, в том числе путем восстановления из резервной копии, — 30 минут;
        * изменение — 60 минут;
        * удаление — 15 минут.
        
        Операции, длящиеся дольше указанного времени, прерываются.
        
        {% cut "Как изменить эти ограничения?" %}
        
        Добавьте к описанию кластера блок `timeouts`, например:
        
        ```hcl
        resource "yandex_mdb_postgresql_cluster" "<имя_кластера>" {
          ...
          timeouts {
            create = "1h30m" # Полтора часа
            update = "2h"    # 2 часа
            delete = "30m"   # 30 минут
          }
        }
        ```
        
        {% endcut %}
        
        {% endnote %}

- REST API {#api}

  1. [Получите IAM-токен для аутентификации в API](../api-ref/authentication.md) и поместите токен в переменную среды окружения:

     ```bash
     export IAM_TOKEN="<IAM-токен>"
     ```

  1. Воспользуйтесь методом [Cluster.Update](../api-ref/Cluster/update.md) и выполните запрос, например, с помощью [cURL](https://curl.se/):

     {% note warning %}
     
     Метод API переопределит все параметры изменяемого объекта, которые не были явно переданы в запросе, на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре `updateMask` (одной строкой через запятую).
     
     {% endnote %}

     ```bash
     curl \
       --request PATCH \
       --header "Authorization: Bearer $IAM_TOKEN" \
       --header "Content-Type: application/json" \
       --url 'https://mdb.api.yandexcloud.kz/managed-postgresql/v1/clusters/<идентификатор_кластера>' \
       --data '{
                 "updateMask": "configSpec.resources.diskTypeId,configSpec.resources.diskSize",
                 "configSpec": {
                   "resources": {
                     "diskTypeId": "<тип_диска>",
                     "diskSize": "<размер_хранилища_в_байтах>"
                   }
                 }
               }'
     ```

     Где:

     * `updateMask` — перечень изменяемых параметров в одну строку через запятую.

     * `configSpec.resources` — параметры хранилища:

         * `diskTypeId` — [тип диска](../concepts/storage.md).
         * `diskSize` — новый размер хранилища в байтах.

     Идентификатор кластера можно запросить со [списком кластеров в каталоге](cluster-list.md#list-clusters).

  1. Убедитесь, что запрос был выполнен успешно, изучив [ответ сервера](../api-ref/Cluster/update.md#yandex.cloud.operation.Operation).

- gRPC API {#grpc-api}

  1. [Получите IAM-токен для аутентификации в API](../api-ref/authentication.md) и поместите токен в переменную среды окружения:

     ```bash
     export IAM_TOKEN="<IAM-токен>"
     ```

  1. Клонируйте репозиторий [cloudapi](https://github.com/yandex-cloud/cloudapi):
     
     ```bash
     cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapi
     ```
     
     Далее предполагается, что содержимое репозитория находится в директории `~/cloudapi/`.
  1. Воспользуйтесь вызовом [ClusterService.Update](../api-ref/grpc/Cluster/update.md) и выполните запрос, например, с помощью [gRPCurl](https://github.com/fullstorydev/grpcurl):

     {% note warning %}
     
     Метод API переопределит все параметры изменяемого объекта, которые не были явно переданы в запросе, на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре `update_mask` (в виде массива строк `paths[]`).
     
     {% cut "Формат перечисления настроек" %}
     
     ```yaml
     "update_mask": {
         "paths": [
             "<настройка_1>",
             "<настройка_2>",
             ...
             "<настройка_N>"
         ]
     }
     ```
     
     {% endcut %}
     
     {% endnote %}

     ```bash
     grpcurl \
       -format json \
       -import-path ~/cloudapi/ \
       -import-path ~/cloudapi/third_party/googleapis/ \
       -proto ~/cloudapi/yandex/cloud/mdb/postgresql/v1/cluster_service.proto \
       -rpc-header "Authorization: Bearer $IAM_TOKEN" \
       -d '{
             "cluster_id": "<идентификатор_кластера>",
             "update_mask": {
               "paths": [
                 "config_spec.resources.disk_type_id",
                 "config_spec.resources.disk_size"
               ]
             },
             "config_spec": {
               "resources": {
                 "disk_type_id": "<тип_диска>",
                 "disk_size": "<размер_хранилища_в_байтах>"
               }
             }
           }' \
       mdb.api.yandexcloud.kz:443 \
       yandex.cloud.mdb.postgresql.v1.ClusterService.Update
     ```

     Где:

     * `update_mask` — перечень изменяемых параметров в виде массива строк `paths[]`.

     * `config_spec.resources` — параметры хранилища:

         * `disk_type_id` — [тип диска](../concepts/storage.md).
         * `disk_size` — новый размер хранилища в байтах.

     Идентификатор кластера можно запросить со [списком кластеров в каталоге](cluster-list.md#list-clusters).

  1. Убедитесь, что запрос был выполнен успешно, изучив [ответ сервера](../api-ref/grpc/Cluster/update.md#yandex.cloud.mdb.postgresql.v1.Cluster).

{% endlist %}

## Настроить автоматическое увеличение размера хранилища {#disk-size-autoscale}

{% note info %}

Некоторые настройки PostgreSQL [зависят от размера хранилища](../concepts/settings-list.md#settings-instance-dependent).

{% endnote %}

Проверьте, что в облаке достаточно квот для увеличения хранилища. Откройте страницу [Квоты](https://kz.console.yandex.cloud/cloud?section=quotas) для облака и убедитесь, что в секции **Managed Databases** в строке **Объём HDD-хранилищ** или **Объём SSD-хранилищ** есть квота на объем хранилищ.

Когда размер хранилища изменяется, хосты кластера обновляются по одному в случайном порядке. Если во время обновления потребуется перезагрузка хоста, он станет недоступным на это время.

Перед обновлением хоста-мастера его роль берет на себя одна из реплик. Если вы используете для доступа к кластеру [FQDN](connect/fqdn.md) хоста-мастера, такой кластер может стать недоступным. Чтобы обеспечить бесперебойную работу приложения, при подключении перечислите все хосты кластера и укажите параметр `target_session_attrs=primary` или подключайтесь через [особый FQDN](connect/fqdn.md), всегда указывающий на текущий хост-мастер.


{% note warning %}

Размер хранилища нельзя уменьшить после автоматического увеличения.

{% endnote %}


{% list tabs group=instructions %}

- Консоль управления {#console}

    1. Перейдите в сервис **Managed Service for PostgreSQL**.
    1. Выберите кластер и нажмите кнопку **Редактировать** на панели сверху.
    1. В блоке **Автоматическое увеличение размера хранилища**:

        1. В поле **Увеличивать размер** задайте процент заполнения хранилища, при превышении которого хранилище будет увеличено. Можно задать правила для увеличения:

            * в следующее [окно обслуживания](../concepts/maintenance.md#maintenance-window);
            * незамедлительно.

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

            Подробнее об условиях для увеличения хранилища в [соответствующем разделе](../concepts/storage.md#auto-rescale).

        1. В поле **Максимальный размер хранилища** укажите максимальный размер хранилища, который может быть установлен при автоматическом увеличении размера хранилища.

    1. Нажмите кнопку **Сохранить изменения**.

- CLI {#cli}

    Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), [установите и инициализируйте его](../../cli/quickstart.md#install).

    По умолчанию используется каталог, указанный при [создании](../../cli/operations/profile/profile-create.md) профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду `yc config set folder-id <идентификатор_каталога>`. Также для любой команды вы можете указать другой каталог с помощью параметров `--folder-name` или `--folder-id`. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.

    Чтобы настроить автоматическое увеличение размера хранилища:

    1. Посмотрите описание команды CLI для изменения кластера:

        ```bash
        yc managed-postgresql cluster update --help
        ```

    1. Укажите максимальный размер хранилища и условия для его увеличения в команде изменения кластера.

        Максимальный размер хранилища должен быть больше, чем значение `disk_size` в свойствах кластера. Процент для незамедлительного увеличения хранилища должен быть больше процента для увеличения в следующее [окно обслуживания](../concepts/maintenance.md#maintenance-window).

        ```bash
        yc managed-postgresql cluster update <идентификатор_или_имя_кластера> \
            --disk-size-autoscaling disk-size-limit=<максимальный_размер_хранилища_в_байтах>,`
                                   `planned-usage-threshold=<процент_для_планового_увеличения>,`
                                   `emergency-usage-threshold=<процент_для_незамедлительного_увеличения>
        ```

        Если настроено увеличение хранилища в окно обслуживания, [настройте расписание окна обслуживания](cluster-maintenance.md#set-maintenance-window).

        Подробнее об условиях для увеличения хранилища в [соответствующем разделе](../concepts/storage.md#auto-rescale).
        
- Terraform {#tf}

    1. Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.

        Инструкцию по созданию такого файла читайте в разделе [Создание кластера](cluster-create.md).

        Полный список доступных для изменения полей конфигурации кластера Managed Service for PostgreSQL вы найдете в [документации провайдера Terraform](../../terraform/resources/mdb_postgresql_cluster.md).

    1. Добавьте в блок `config` блок `disk_size_autoscaling`:

        ```hcl
          resource "yandex_mdb_postgresql_cluster" "<имя_кластера>" {
            ...
            config {
              ...
              disk_size_autoscaling {
                disk_size_limit           = <максимальный_размер_хранилища_ГиБ>
                emergency_usage_threshold = <порог_для_незамедлительного_увеличения_в_процентах>
                planned_usage_threshold   = <порог_для_планового_увеличения_в_процентах>
              }
              ...
            }
            ...
          }
        ```
        Где:
        
        * `disk_size_limit` — максимальный размер хранилища после увеличения, в гибибайтах.
        * `emergency_usage_threshold` (опционально) — порог заполнения хранилища в процентах, при достижении которого оно будет увеличено незамедлительно. По умолчанию — `0` (автоматическое расширение отключено).
        
          Допустимые значения: от `0` до `100`.
             
        * `planned_usage_threshold` (опционально) — порог заполнения хранилища в процентах, при достижении которого оно будет увеличено в следующее окно обслуживания. По умолчанию — `0` (автоматическое расширение отключено).
               
          Допустимые значения: от `0` до `100`.
        
        Подробнее об условиях для увеличения хранилища читайте в [соответствующем разделе](../concepts/storage.md#auto-rescale).
        
        {% note warning %}
        
        Если заданы оба порога, значение `emergency_usage_threshold` должно быть не меньше `planned_usage_threshold`.
        
        {% endnote %}
    
    1. Если задан параметр `planned_usage_threshold`, [настройте расписание окна обслуживания](cluster-maintenance.md#set-maintenance-window).
    
    1. Проверьте корректность настроек.

        1. В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
        1. Выполните команду:
        
           ```bash
           terraform validate
           ```
        
           Если в файлах конфигурации есть ошибки, Terraform на них укажет.

    1. Подтвердите изменение ресурсов.

        1. Выполните команду для просмотра планируемых изменений:
        
           ```bash
           terraform plan
           ```
        
           Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
        
        1. Если вас устраивают планируемые изменения, внесите их:
           1. Выполните команду:
        
              ```bash
              terraform apply
              ```
        
           1. Подтвердите изменение ресурсов.
           1. Дождитесь завершения операции.

        {% note warning "Ограничения по времени" %}
        
        Провайдер Terraform ограничивает время на выполнение операций с кластером Managed Service for PostgreSQL:
        
        * создание, в том числе путем восстановления из резервной копии, — 30 минут;
        * изменение — 60 минут;
        * удаление — 15 минут.
        
        Операции, длящиеся дольше указанного времени, прерываются.
        
        {% cut "Как изменить эти ограничения?" %}
        
        Добавьте к описанию кластера блок `timeouts`, например:
        
        ```hcl
        resource "yandex_mdb_postgresql_cluster" "<имя_кластера>" {
          ...
          timeouts {
            create = "1h30m" # Полтора часа
            update = "2h"    # 2 часа
            delete = "30m"   # 30 минут
          }
        }
        ```
        
        {% endcut %}
        
        {% endnote %}

- REST API {#api}

  1. [Получите IAM-токен для аутентификации в API](../api-ref/authentication.md) и поместите токен в переменную среды окружения:

     ```bash
     export IAM_TOKEN="<IAM-токен>"
     ```

  1. Воспользуйтесь методом [Cluster.Update](../api-ref/Cluster/update.md) и выполните запрос, например, с помощью [cURL](https://curl.se/):

     {% note warning %}
     
     Метод API переопределит все параметры изменяемого объекта, которые не были явно переданы в запросе, на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре `updateMask` (одной строкой через запятую).
     
     {% endnote %}

     ```bash
     curl \
       --request PATCH \
       --header "Authorization: Bearer $IAM_TOKEN" \
       --header "Content-Type: application/json" \
       --url 'https://mdb.api.yandexcloud.kz/managed-postgresql/v1/clusters/<идентификатор_кластера>' \
       --data '{
                 "updateMask": "configSpec.diskSizeAutoscaling,maintenanceWindow",
                 "configSpec": {
                   "diskSizeAutoscaling": {
                     "plannedUsageThreshold": "<порог_для_планового_увеличения_в_процентах>",
                     "emergencyUsageThreshold": "<порог_для_незамедлительного_увеличения_в_процентах>",
                     "diskSizeLimit": "<максимальный_размер_хранилища_в_байтах>"
                   }
                 },
                 "maintenanceWindow": {
                   "weeklyMaintenanceWindow": {
                     "day": "<день_недели>",
                     "hour": "<порядковый_номер_часового_интервала>"
                   }
                 }
               }'
     ```

     Где:

     * `updateMask` — перечень изменяемых параметров в одну строку через запятую.

       В данном случае надо передать только параметры `configSpec.diskSizeAutoscaling` и `maintenanceWindow`.

     * `configSpec` — настройки кластера:
       
       * `diskSizeAutoscaling` — настройки автоматического увеличения размера хранилища:
         * `plannedUsageThreshold` (опционально) — порог заполнения хранилища в процентах, при достижении которого оно будет увеличено в следующее окно обслуживания. По умолчанию — `0` (автоматическое расширение отключено).
                  
           Допустимые значения: от `0` до `100`.
       
         * `emergencyUsageThreshold` (опционально) — порог заполнения хранилища в процентах, при достижении которого оно будет увеличено незамедлительно. По умолчанию — `0` (автоматическое расширение отключено).
                  
           Допустимые значения: от `0` до `100`. 
       
         * `diskSizeLimit` — максимальный размер хранилища после увеличения, в байтах. 
       
         {% note warning %}
         
         * При использовании параметра `plannedUsageThreshold` необходимо задать окно технического обслуживания в настройке `maintenanceWindow`.
               
         * Если заданы оба порога, значение `emergencyUsageThreshold` должно быть не меньше `plannedUsageThreshold`.
       
         {% endnote %}
       
           Подробнее об условиях для увеличения хранилища читайте в [соответствующем разделе](../concepts/storage.md#auto-rescale).

         Значение задается в процентах от `0` до `100`. По умолчанию — `0` (автоматическое расширение отключено). Должно быть не меньше значения `plannedUsageThreshold`.

       * `diskSizeLimit` — максимальный размер хранилища (в байтах), который может быть установлен при достижении одного из заданных процентов заполнения.

        Подробнее об условиях для увеличения хранилища в [соответствующем разделе](../concepts/storage.md#auto-rescale).

     * `maintenanceWindow` — расписание окна технического обслуживания. Нужно, только если вы задали параметр `plannedUsageThreshold`. Содержит следующие параметры:

       * `weeklyMaintenanceWindow.day` — день недели: `MON`, `TUE`, `WED`, `THU`, `FRI`, `SAT` или `SUN`.
       * `weeklyMaintenanceWindow.hour` — час по UTC: от `1` до `24`.
           
         > Например, `1` соответствует интервалу с `00:00` до `01:00`, `5` — с `04:00` до `05:00`.

     Идентификатор кластера можно запросить со [списком кластеров в каталоге](cluster-list.md#list-clusters).

  1. Убедитесь, что запрос был выполнен успешно, изучив [ответ сервера](../api-ref/Cluster/update.md#yandex.cloud.operation.Operation).

- gRPC API {#grpc-api}

  1. [Получите IAM-токен для аутентификации в API](../api-ref/authentication.md) и поместите токен в переменную среды окружения:

     ```bash
     export IAM_TOKEN="<IAM-токен>"
     ```

  1. Клонируйте репозиторий [cloudapi](https://github.com/yandex-cloud/cloudapi):
     
     ```bash
     cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapi
     ```
     
     Далее предполагается, что содержимое репозитория находится в директории `~/cloudapi/`.
  1. Воспользуйтесь вызовом [ClusterService.Update](../api-ref/grpc/Cluster/update.md) и выполните запрос, например, с помощью [gRPCurl](https://github.com/fullstorydev/grpcurl):

     {% note warning %}
     
     Метод API переопределит все параметры изменяемого объекта, которые не были явно переданы в запросе, на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре `update_mask` (в виде массива строк `paths[]`).
     
     {% cut "Формат перечисления настроек" %}
     
     ```yaml
     "update_mask": {
         "paths": [
             "<настройка_1>",
             "<настройка_2>",
             ...
             "<настройка_N>"
         ]
     }
     ```
     
     {% endcut %}
     
     {% endnote %}

     ```bash
     grpcurl \
       -format json \
       -import-path ~/cloudapi/ \
       -import-path ~/cloudapi/third_party/googleapis/ \
       -proto ~/cloudapi/yandex/cloud/mdb/postgresql/v1/cluster_service.proto \
       -rpc-header "Authorization: Bearer $IAM_TOKEN" \
       -d '{
             "cluster_id": "<идентификатор_кластера>",
             "update_mask": {
               "paths": [
                 "config_spec.disk_size_autoscaling",
                 "maintenance_window"
               ]
             },
             "config_spec": {
               "disk_size_autoscaling": {
                 "planned_usage_threshold": "<порог_для_планового_увеличения_в_процентах>",
                 "emergency_usage_threshold": "<порог_для_незамедлительного_увеличения_в_процентах>",
                 "disk_size_limit": "<максимальный_размер_хранилища_в_байтах>"
               }
             },
             "maintenance_window": {
               "weekly_maintenance_window": {
                 "day": "<день_недели>",
                 "hour": "<порядковый_номер_часового_интервала>"
               }
             }
           }' \
       mdb.api.yandexcloud.kz:443 \
       yandex.cloud.mdb.postgresql.v1.ClusterService.Update
     ```

     Где:

     * `update_mask` — перечень изменяемых параметров в виде массива строк `paths[]`.

       В данном случае надо передать только параметры `config_spec.disk_size_autoscaling` и `maintenance_window`.

     * `config_spec` — настройки кластера:

       * `disk_size_autoscaling` — настройки автоматического увеличения размера хранилища:
                
         * `planned_usage_threshold` (опционально) — порог заполнения хранилища в процентах, при достижении которого оно будет увеличено в следующее окно обслуживания. По умолчанию — `0` (автоматическое расширение отключено).
                  
           Допустимые значения: от `0` до `100`.
       
         * `emergency_usage_threshold` (опционально) — порог заполнения хранилища в процентах, при достижении которого оно будет увеличено незамедлительно. По умолчанию — `0` (автоматическое расширение отключено).
                  
           Допустимые значения: от `0` до `100`.
       
         * `disk_size_limit` — максимальный размер хранилища после увеличения, в байтах. 
       
         {% note warning %}
         
         * При использовании параметра `planned_usage_threshold` необходимо задать окно технического обслуживания в настройке `maintenance_window`.
               
         * Если заданы оба порога, значение `emergency_usage_threshold` должно быть не меньше `planned_usage_threshold`.
       
         {% endnote %}
       
         Подробнее об условиях для увеличения хранилища читайте в [соответствующем разделе](../concepts/storage.md#auto-rescale).

        Подробнее об условиях для увеличения хранилища в [соответствующем разделе](../concepts/storage.md#auto-rescale).

     * `maintenance_window` — расписание окна технического обслуживания. Нужно, только если вы задали параметр `planned_usage_threshold`. Содержит следующие параметры:

       * `weekly_maintenance_window.day` — день недели: `MON`, `TUE`, `WED`, `THU`, `FRI`, `SAT` или `SUN`.
       * `weekly_maintenance_window.hour` — час по UTC: от `1` до `24`.
           
         > Например, `1` соответствует интервалу с `00:00` до `01:00`, `5` — с `04:00` до `05:00`.

     Идентификатор кластера можно запросить со [списком кластеров в каталоге](cluster-list.md#list-clusters).

  1. Убедитесь, что запрос был выполнен успешно, изучив [ответ сервера](../api-ref/grpc/Cluster/update.md#yandex.cloud.mdb.postgresql.v1.Cluster).

{% endlist %}

Если заданный процент заполнения достигнут, размер хранилища увеличивается по-разному в зависимости от типа диска:

* Для сетевых HDD- и SSD-дисков — на большее из двух значений: 20 ГБ или 20% от текущего размера диска.
* Для нереплицируемых SSD-дисков и сверхбыстрых сетевых SSD-дисков с тремя репликами — на 93 ГБ.
* Для локальных SSD-дисков:

    * В кластере на платформе **Intel Broadwell** или **Intel Cascade Lake** — на 100 ГБ.
    * В кластере на платформе **Intel Ice Lake** или **AMD Zen 4** — на 368 ГБ.


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