Режим «Только для чтения»

Содержание раздела
  1. Уровни включения режима
  2. Управление режимом
  3. Что блокируется
    1. На уровне окружения
    2. На уровне логической сущности
  4. Что продолжает работать
  5. Режим для партиционированных таблиц и партиций
  6. Отмена выполняемых операций записи

Система поддерживает сервисный режим работы «Только для чтения», блокирующий изменения логической схемы и данных на всех нодах кластера. Этот режим позволяет безопасно проводить техническое обслуживание системы и связанных компонентов.

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

Уровни включения режима

Режим «Только для чтения» можно включить на уровне всего окружения или отдельной логической сущности (см. таблицу ниже).

Уровень Область действия Ошибка при отклонении запроса
Окружение Логические сущности* всех логических БД окружения Environment is readonly
Логическая сущность Указанная логическая сущность*
  • Entity <entity_name> is readonly — если режим включен только на уровне сущности;
  • Environment is readonly — если режим включен на уровнях сущности и окружения

* Список сущностей, для которых доступна блокировка изменений, см. в секции Что блокируется.

Уровни равнозначны и не зависят друг от друга:

  • сущность доступна только для чтения, если режим «Только для чтения» включен для нее хотя бы на одном из уровней;
  • сущность доступна в полном объеме, если режим выключен на обоих уровнях;
  • порядок включения режима на уровнях не важен;
  • включение и выключение режима на одном уровне не влияет на другой уровень.

Управление режимом

Режим включается и выключается запросами:

Что блокируется

На уровне окружения

В режиме «Только для чтения», включенном на уровне окружения, блокируются:

На уровне логической сущности

В режиме «Только для чтения», включенном на уровне сущности, для нее блокируются:

  • операции по изменению схемы**, задействующие сущность:
    • изменение и удаление сущности;
    • довыполнение незавершенной операции повторным запуском DDL-запроса;
  • операции с данными:
    • [для логической или снапшот-таблицы] загрузка и обновление данных сущности;
    • [для материализованного представления] синхронизация сущности;
  • управление статистикой:

* Операции по изменению схемы блокируются для логических, снапшот- и постоянных прокси-таблиц, а также логических и материализованных представлений.

Остальные сущности окружения остаются доступны для чтения и записи, если для них выключен режим «Только для чтения».

Что продолжает работать

В режиме «Только для чтения», включенном на любом из уровней, продолжают работать:

Режим для партиционированных таблиц и партиций

Режим «Только для чтения» на уровне сущности включается отдельно для партиционированной таблицы и каждой ее партиции.

Режим, включенный только для партиционированной таблицы:

  • блокирует DDL-операции для самой таблицы, но не для ее партиций;
  • блокирует запись через таблицу, но не запись напрямую в ее партиции.

Режим, включенный только для некоторых или всех партиций партиционированной таблицы:

  • блокирует DDL-операции для этих партиций, но не для их партиционированной таблицы или других партиций;
  • блокирует запись в эти партиции и их партиционированную таблицу, но не в другие партиции той же таблицы.

Отмена выполняемых операций записи

При включении режима «Только для чтения» система может отменить выполняемые операции записи:

  • [на уровне окружения] все операции окружения,
  • [на уровне сущности] операции по этой сущности.

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

  1. Дожидается завершения операций в статусе 1 (Подготовлена);
  2. Отменяет операции в статусе 0 (Выполняется). Ответ возвращается только после завершения отмены или по истечении тайм-аута DELTA_ROLLBACK_OPERATIONS_TIMEOUT_MS.

Если во время отмены операций сменился лидер кластера, новый лидер автоматически завершает включение режима и отмену операций.

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