Управление дисковым пространством
При заполнении хранилища более чем на 97% хост автоматически переходит в режим read-only.
Чтобы избежать проблем с операциями записи в базу данных, воспользуйтесь одним из способов:
-
Настройте алерты в Yandex Monitoring, чтобы отслеживать степень заполнения хранилища.
-
Выведите кластер из режима read-only вручную и освободите место в хранилище, удалив часть данных.
-
Увеличьте размер хранилища, чтобы снять режим read-only автоматически. Вы также можете сменить тип диска.
Настроить алерты в Yandex Monitoring
-
Перейдите в сервис Monitoring.
-
Выберите сервисный дашборд Managed Service for PostgreSQL.
-
Создайте алерт со следующими параметрами:
-
Метрики — задайте параметры метрики:
-
облако;
-
каталог;
-
сервис Managed Service for PostgreSQL;
-
идентификатор кластера Managed Service for PostgreSQL;
Идентификатор кластера можно получить со списком кластеров в каталоге.
-
метка
disk.free_bytes.
-
-
Условия срабатывания — задайте условие
Меньше или равнодля процента заполнения свободного дискового пространства, при котором сработает алерт:- Функция агрегации —
Минимум(минимальное значение метрики за период). - Warning —
90(90% от размера хранилища). - Alarm —
95(95% от размера хранилища). - Окно вычисления — желаемый период, с которым будет обновляться значение метрики.
- Функция агрегации —
-
Добавьте созданный ранее канал уведомлений.
-
Вывести кластер из режима read-only вручную
Внимание
Не допускайте, чтобы во время выполнения указанных ниже действий свободное дисковое пространство уменьшилось до нуля. Поскольку предохранительный механизм отключен, PostgreSQL в этом случае аварийно завершит работу, а кластер станет неработоспособным.
Чтобы отключить режим read-only:
-
Подключитесь к БД любым удобным способом.
-
Откройте транзакцию и внутри нее выполните команду:
SET LOCAL transaction_read_only TO off; -
В рамках этой же транзакции удалите ненужные данные с помощью операторов
DROPилиTRUNCATE. Не используйте операторDELETE— при его использовании строки отмечаются как удаленные, но не удаляются из базы физически. -
Зафиксируйте транзакцию и перезапустите все подключения к базе.
Например, если ваша база содержит ненужную таблицу
ExcessDataTable1, удалите ее с помощью транзакции:BEGIN; SET LOCAL transaction_read_only TO off; DROP TABLE ExcessDataTable1; COMMIT;
Изменить тип диска и увеличить размер хранилища
Примечание
Некоторые настройки PostgreSQL зависят от размера хранилища.
Проверьте, что в облаке достаточно квот для увеличения хранилища. Откройте страницу Квоты
Важно
- Размер хранилища нельзя уменьшить.
- Во время изменения размера хранилища хосты кластера будут недоступны.
Чтобы изменить тип диска и увеличить размер хранилища для кластера:
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
Чтобы изменить тип диска и увеличить размер хранилища для кластера:
-
Посмотрите описание команды CLI для изменения кластера:
yc managed-postgresql cluster update --help -
Укажите тип диска и нужный размер хранилища в команде изменения кластера (размер хранилища должен быть не меньше, чем значение
disk_sizeв свойствах кластера):yc managed-postgresql cluster update <имя_или_идентификатор_кластера> \ --disk-type <тип_диска> \ --disk-size <размер_хранилища_ГБ>
Чтобы изменить тип диска и увеличить размер хранилища для кластера:
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
О том, как создать такой файл, см. в разделе Создание кластера.
Полный список доступных для изменения полей конфигурации кластера Managed Service for PostgreSQL см. в документации провайдера Terraform.
-
Измените в описании кластера Managed Service for PostgreSQL значения атрибутов
disk_type_idиdisk_sizeв блокеconfig.resources:resource "yandex_mdb_postgresql_cluster" "<имя_кластера>" { ... config { resources { disk_type_id = "<тип_диска>" disk_size = <размер_хранилища_в_гигабайтах> ... } } } -
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
Ограничения по времени
Провайдер Terraform ограничивает время на выполнение операций с кластером Managed Service for PostgreSQL:
- создание, в том числе путем восстановления из резервной копии, — 30 минут;
- изменение — 60 минут;
- удаление — 15 минут.
Операции, длящиеся дольше указанного времени, прерываются.
Как изменить эти ограничения?
Добавьте к описанию кластера блок
timeouts, например:resource "yandex_mdb_postgresql_cluster" "<имя_кластера>" { ... timeouts { create = "1h30m" # Полтора часа update = "2h" # 2 часа delete = "30m" # 30 минут } } -
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Воспользуйтесь методом Cluster.Update и выполните запрос, например, с помощью cURL
:Важно
Метод API переопределит все параметры изменяемого объекта, которые не были явно переданы в запросе, на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре
updateMask(одной строкой через запятую).curl \ --request PATCH \ --header "Authorization: Bearer $IAM_TOKEN" \ --header "Content-Type: application/json" \ --url 'https://mdb.api.cloud.yandex.net/managed-postgresql/v1/clusters/<идентификатор_кластера>' \ --data '{ "updateMask": "configSpec.resources.diskTypeId,configSpec.resources.diskSize", "configSpec": { "resources": { "diskTypeId": "<тип_диска>", "diskSize": "<размер_хранилища_в_байтах>" } } }'Где:
-
updateMask— перечень изменяемых параметров в одну строку через запятую. -
configSpec.resources— параметры хранилища:diskTypeId— тип диска.diskSize— новый размер хранилища в байтах.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapiДалее предполагается, что содержимое репозитория находится в директории
~/cloudapi/. -
Воспользуйтесь вызовом ClusterService.Update и выполните запрос, например, с помощью gRPCurl
:Важно
Метод API переопределит все параметры изменяемого объекта, которые не были явно переданы в запросе, на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре
update_mask(в виде массива строкpaths[]).Формат перечисления настроек
"update_mask": { "paths": [ "<настройка_1>", "<настройка_2>", ... "<настройка_N>" ] }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.cloud.yandex.net:443 \ yandex.cloud.mdb.postgresql.v1.ClusterService.UpdateГде:
-
update_mask— перечень изменяемых параметров в виде массива строкpaths[]. -
config_spec.resources— параметры хранилища:disk_type_id— тип диска.disk_size— новый размер хранилища в байтах.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Настроить автоматическое увеличение размера хранилища
Примечание
Некоторые настройки PostgreSQL зависят от размера хранилища.
Проверьте, что в облаке достаточно квот для увеличения хранилища. Откройте страницу Квоты
Важно
- Размер хранилища нельзя уменьшить.
- Во время изменения размера хранилища хосты кластера будут недоступны.
-
Перейдите в сервис Managed Service for PostgreSQL.
-
Выберите кластер и нажмите кнопку Редактировать на панели сверху.
-
В блоке Автоматическое увеличение размера хранилища:
-
В поле Увеличивать размер задайте процент заполнения хранилища, при превышении которого хранилище будет увеличено. Можно задать правила для увеличения:
- в следующее окно обслуживания;
- незамедлительно.
Можно задать оба правила, но порог для незамедлительного увеличения должен быть выше порога для увеличения в окно обслуживания.
Подробнее об условиях для увеличения хранилища см. в соответствующем разделе.
-
В поле Максимальный размер хранилища укажите максимальный размер хранилища, который может быть установлен при автоматическом увеличении размера хранилища.
-
-
Нажмите кнопку Сохранить изменения.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
Чтобы настроить автоматическое увеличение размера хранилища:
-
Посмотрите описание команды CLI для изменения кластера:
yc managed-postgresql cluster update --help -
Укажите максимальный размер хранилища и условия для его увеличения в команде изменения кластера.
Максимальный размер хранилища должен быть больше, чем значение
disk_sizeв свойствах кластера. Процент для незамедлительного увеличения хранилища должен быть больше процента для увеличения в следующее окно обслуживания.yc managed-postgresql cluster update <идентификатор_или_имя_кластера> \ --disk-size-autoscaling disk-size-limit=<максимальный_размер_хранилища_в_байтах>,` `planned-usage-threshold=<процент_для_планового_увеличения>,` `emergency-usage-threshold=<процент_для_незамедлительного_увеличения>Если настроено увеличение хранилища в окно обслуживания, настройте расписание окна обслуживания.
Подробнее об условиях для увеличения хранилища см. в соответствующем разделе.
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
О том, как создать такой файл, см. в разделе Создание кластера.
Полный список доступных для изменения полей конфигурации кластера Managed Service for PostgreSQL см. в документации провайдера Terraform.
-
Добавьте в блок
configблокdisk_size_autoscaling: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.
Подробнее об условиях для увеличения хранилища см. в соответствующем разделе.
Важно
Если заданы оба порога, значение
emergency_usage_thresholdдолжно быть не меньшеplanned_usage_threshold. -
-
Если задан параметр
planned_usage_threshold, настройте расписание окна технического обслуживания. -
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
Ограничения по времени
Провайдер Terraform ограничивает время на выполнение операций с кластером Managed Service for PostgreSQL:
- создание, в том числе путем восстановления из резервной копии, — 30 минут;
- изменение — 60 минут;
- удаление — 15 минут.
Операции, длящиеся дольше указанного времени, прерываются.
Как изменить эти ограничения?
Добавьте к описанию кластера блок
timeouts, например:resource "yandex_mdb_postgresql_cluster" "<имя_кластера>" { ... timeouts { create = "1h30m" # Полтора часа update = "2h" # 2 часа delete = "30m" # 30 минут } } -
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Воспользуйтесь методом Cluster.Update и выполните запрос, например, с помощью cURL
:Важно
Метод API переопределит все параметры изменяемого объекта, которые не были явно переданы в запросе, на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре
updateMask(одной строкой через запятую).curl \ --request PATCH \ --header "Authorization: Bearer $IAM_TOKEN" \ --header "Content-Type: application/json" \ --url 'https://mdb.api.cloud.yandex.net/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— максимальный размер хранилища после увеличения, в байтах.
Важно
-
При использовании параметра
plannedUsageThresholdнеобходимо задать окно технического обслуживания в настройкеmaintenanceWindow. -
Если заданы оба порога, значение
emergencyUsageThresholdдолжно быть не меньшеplannedUsageThreshold.
Подробнее об условиях для увеличения хранилища см. в соответствующем разделе.
-
Значение задается в процентах от
0до100. По умолчанию —0(автоматическое расширение отключено). Должно быть не меньше значенияplannedUsageThreshold.diskSizeLimit— максимальный размер хранилища (в байтах), который может быть установлен при достижении одного из заданных процентов заполнения.
Подробнее об условиях для увеличения хранилища см. в соответствующем разделе.
-
-
maintenanceWindow— расписание окна технического обслуживания. Нужно, только если вы задали параметрplannedUsageThreshold. Содержит следующие параметры:day— день недели в форматеDDD, когда должно проходить обслуживание.hour— час дня в форматеHH, когда должно проходить обслуживание. Возможные значения: от1до24.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapiДалее предполагается, что содержимое репозитория находится в директории
~/cloudapi/. -
Воспользуйтесь вызовом ClusterService.Update и выполните запрос, например, с помощью gRPCurl
:Важно
Метод API переопределит все параметры изменяемого объекта, которые не были явно переданы в запросе, на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре
update_mask(в виде массива строкpaths[]).Формат перечисления настроек
"update_mask": { "paths": [ "<настройка_1>", "<настройка_2>", ... "<настройка_N>" ] }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.cloud.yandex.net: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— максимальный размер хранилища после увеличения, в байтах.
Важно
-
При использовании параметра
planned_usage_thresholdнеобходимо задать окно технического обслуживания в настройкеmaintenance_window. -
Если заданы оба порога, значение
emergency_usage_thresholdдолжно быть не меньшеplanned_usage_threshold.
Подробнее об условиях для увеличения хранилища см. в соответствующем разделе.
-
Подробнее об условиях для увеличения хранилища см. в соответствующем разделе.
-
-
maintenance_window— расписание окна технического обслуживания. Нужно, только если вы задали параметрplanned_usage_threshold. Содержит следующие параметры:day— день недели в форматеDDD, когда должно проходить обслуживание.hour— час дня в форматеHH, когда должно проходить обслуживание. Возможные значения: от1до24.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Если заданный порог достигнут, размер хранилища увеличивается по-разному в зависимости от типа диска:
-
Для сетевых HDD- и SSD-дисков — на большее из двух значений: 20 ГБ или 20% от текущего размера диска.
-
Для нереплицируемых SSD-дисков и сверхбыстрых сетевых SSD-дисков с тремя репликами — на 93 ГБ.
-
Для локальных SSD-дисков:
- В кластере на платформе Intel Broadwell или Intel Cascade Lake — на 100 ГБ.
- В кластере на платформе Intel Ice Lake — на 368 ГБ.
Если порог срабатывания достигнут повторно, размер хранилища будет автоматически увеличиваться, пока не достигнет заданного максимума. После этого вы можете задать новый максимальный размер хранилища вручную.