Настройки первоначального snapshot
Примечание
При настройке SOURCE-коннектора для источника MsSQL настройки первоначального snapshot определяют блокировку таблиц источника при импорте модели и данных.
Эти настройки включают два параметра:
snapshot.locking.mode
Определяет стратегию блокировок при выполнении снимка данных для предотвращения конфликтов.
none – транзакция не блокирует данные, позволяя другим транзакциям читать и изменять их параллельно.
Этот режим можно безопасно использовать только в том случае, если во время создания snapshot не происходит никаких изменений схемы.
✓ Улучшает производительность.
x Риск конфликтов и несогласованности данных.
exclusive – транзакция блокирует данные, предотвращая доступ других транзакций до завершения считывания метаданных.
✓ Гарантирует максимальную согласованность.
x Может вызывать блокировки и снижать производительность.
snapshot.isolation.mode
Определяет, как одна транзакция воспринимает изменения, внесённые другими транзакциями, и как долго блокируются таблицы, входящие в состав коннектора.
read_uncommitted
Наименее строгий уровень изоляции, игнорирующий блокировки, размещенные другими транзакциями. Транзакция может считывать измененные значения данных, которые еще не были зафиксированы другими транзакциями.
✓ Минимальные блокировки, высокая производительность.
x Возможно «грязное чтение», потеря или повреждение некоторых данных.
read_committed
Транзакция не может считывать значения данных, которые были изменены, но еще не зафиксированы другими транзакциями.
Другие транзакции могут изменять, вставлять или удалять данные между выполнениями отдельных инструкций в текущей транзакции.
✓ Предотвращает «грязное чтение».
x Возможно «неповторяющееся чтение», дублирование данных.
repeatable_read
Включает в себя read_committed и дополнительно указывает, что никакие другие транзакции не могут изменять или удалять данные, которые были считаны текущей транзакцией, пока текущая транзакция не будет зафиксирована.
✓ Защищает от «грязного» и «неповторяющегося» чтения.
x Возможно «фантомное чтение», дублирование данных.
snapshot
Данные, считываемые в рамках транзакции, никогда не будут отражать изменения, внесенные другими одновременными транзакциями.
При чтении данные не блокируются, поэтому транзакции моментальных снимков не блокируют запись данных другими транзакциями.
Обеспечивается согласованность без блокировок (рекомендуется для больших баз).
✓ Полная изоляция без блокировок.
x Требует дополнительных ресурсов для хранения версий.
exclusive
Строгая блокировка данных на время транзакции.
✓ Максимальная согласованность.
x Серьёзно снижает параллельную работу.
Важно:
Режимы snapshot, read_committed и read_uncommitted не блокируют обновления данных другими транзакциями во время первоначального снимка.
Режимы exclusive и repeatable_read предотвращают параллельные обновления.
Когда необходимо настраивать?
Согласованность данных – если требуется гарантировать, что начальный снимок будет точным и непротиворечивым.
Лучше использовать: snapshot.isolation.mode = snapshot или exclusive.
Производительность – выбор режима влияет на нагрузку на базу и время выполнения снимка.
Минимизация блокировок – в продакшн-средах важно избегать длительных блокировок таблиц.
Важно
По умолчанию используются значения:
snapshot.isolation.mode = snapshot
snapshot.locking.mode = none
Следует учитывать ограничения:
Для источника-реплики изменение настройки не доступно. Будут использоваться значения по умолчанию.
Для snapshot_locking_mode = exclusive, допустимые значения snapshot_isolation_mode: repeatable_read или exclusive.
locking_mode →
isolation_mode ↓
none
exclusive
read_uncommitted
✓
x
read_committed
✓
x
repeatable_read
✓
✓
snapshot
✓
x
exclusive
✓
✓
Раскройте «Настройки первоначального snapshot».
Отобразятся две настройки:
snapshot.isolation.mode.
Доступные значения:
read_uncommitted
read_committed
repeatable_read
snapshot (значение по умолчанию)
exclusive
snapshot.locking.mode.
Доступные значения:
none (значение по умолчанию)
exclusive
Измените значения настроек при необходимости.
Нажмите кнопку Сохранить.