Управление дисковым пространством
При заполнении хранилища более чем на 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 зависят от размера хранилища.
Проверьте, что в облаке достаточно квот для увеличения хранилища. Откройте страницу Квоты
Важно
- Размер хранилища нельзя уменьшить.
- Во время изменения размера хранилища хосты кластера будут недоступны.
Чтобы увеличить размер хранилища для кластера:
- Перейдите на страницу каталога и выберите сервис Managed Service for PostgreSQL.
- Выберите кластер и нажмите кнопку
Редактировать на панели сверху. - В блоке Размер хранилища укажите необходимое значение.
- Нажмите кнопку Сохранить изменения.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы увеличить размер хранилища для кластера:
-
Посмотрите описание команды CLI для изменения кластера:
yc managed-postgresql cluster update --help
-
Укажите нужный размер хранилища в команде изменения кластера (должен быть не меньше, чем значение
disk_size
в свойствах кластера):yc managed-postgresql cluster update <имя_или_идентификатор_кластера> \ --disk-size <размер_хранилища_ГБ>
Чтобы увеличить размер хранилища для кластера:
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
О том, как создать такой файл, см. в разделе Создание кластера.
Полный список доступных для изменения полей конфигурации кластера Managed Service for PostgreSQL см. в документации провайдера Terraform
. -
Измените в описании кластера Managed Service for PostgreSQL значение атрибута
disk_size
в блокеconfig.resources
:resource "yandex_mdb_postgresql_cluster" "<имя_кластера>" { ... config { resources { 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.diskSize", "configSpec": { "resources": { "diskSize": "<размер_хранилища_в_байтах>" } } }'
Где:
-
updateMask
— перечень изменяемых параметров в одну строку через запятую.В данном случае передается только один параметр.
-
configSpec.resources.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_size" ] }, "config_spec": { "resources": { "disk_size": "<размер_хранилища_в_байтах>" } } }' \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.postgresql.v1.ClusterService.Update
Где:
-
update_mask
— перечень изменяемых параметров в виде массива строкpaths[]
.В данном случае передается только один параметр.
-
config_spec.resources.disk_size
— новый размер хранилища в байтах.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Настроить автоматическое увеличение размера хранилища
Примечание
Некоторые настройки PostgreSQL зависят от размера хранилища.
Проверьте, что в облаке достаточно квот для увеличения хранилища. Откройте страницу Квоты
Важно
- Размер хранилища нельзя уменьшить.
- Во время изменения размера хранилища хосты кластера будут недоступны.
-
Перейдите на страницу каталога и выберите сервис Managed Service for PostgreSQL.
-
Выберите кластер и нажмите кнопку Редактировать на панели сверху.
-
В блоке Автоматическое увеличение размера хранилища:
-
В поле Увеличивать размер задайте процент заполнения хранилища, при превышении которого хранилище будет увеличено. Можно задать правила для увеличения:
- в следующее окно обслуживания;
- незамедлительно.
Можно задать оба правила, но порог для незамедлительного увеличения должен быть выше порога для увеличения в окно обслуживания.
-
В поле Максимальный размер хранилища укажите максимальный размер хранилища, который может быть установлен при автоматическом увеличении размера хранилища.
-
-
Нажмите кнопку Сохранить изменения.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --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=<процент_для_незамедлительного_увеличения>
Если настроено увеличение хранилища в окно обслуживания, настройте расписание окна обслуживания.
-
Получите 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
до100
. По умолчанию —0
(автоматическое расширение отключено).Если вы задали этот параметр, настройте расписание окна технического обслуживания в параметре
maintenanceWindow
. -
emergencyUsageThreshold
— процент заполнения хранилища, при котором хранилище будет увеличено немедленно.Значение задается в процентах от
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
до100
. По умолчанию —0
(автоматическое расширение отключено).Если вы задали этот параметр, настройте расписание окна технического обслуживания в параметре
maintenance_window
. -
emergency_usage_threshold
— процент заполнения хранилища, при котором хранилище будет увеличено немедленно.Значение задается в процентах от
0
до100
. По умолчанию —0
(автоматическое расширение отключено). Должно быть не меньше значенияplanned_usage_threshold
. -
disk_size_limit
— максимальный размер хранилища (в байтах), который может быть установлен при достижении одного из заданных процентов заполнения.
-
-
maintenance_window
— расписание окна технического обслуживания. Нужно, только если вы задали параметрplanned_usage_threshold
. Содержит следующие параметры:day
— день недели в форматеDDD
, когда должно проходить обслуживание.hour
— час в форматеHH
, когда должно проходить обслуживание. Возможные значения: от1
до24
.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Если заданный порог достигнут, размер хранилища увеличивается по-разному в зависимости от типа диска:
-
Для сетевых HDD- и SSD-дисков — на большее из двух значений: 20 ГБ или 20% от текущего размера диска.
-
Для нереплицируемых SSD-дисков — на 93 ГБ.
-
Для локальных SSD-дисков:
- В кластере на платформе Intel Broadwell или Intel Cascade Lake — на 100 ГБ.
- В кластере на платформе Intel Ice Lake — на 368 ГБ.
Если порог срабатывания достигнут повторно, размер хранилища будет автоматически увеличиваться, пока не достигнет заданного максимума. После этого вы можете задать новый максимальный размер хранилища вручную.