Всегда включено: Может ли выбор запросов в синхронной вторичной реплике повлиять на запросы в первичной реплике?

#sql-server #transactions #locking #alwayson

Вопрос:

Обычно рекомендуется перенаправлять запросы select на вторичную реплику, объявляя соединения доступными только для чтения. Но у меня есть сомнения на этот счет.

Я знаю два факта:

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

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

Обратите внимание, что это произойдет только с синхронными репликами, а не с асинхронными.

Заранее спасибо,

Ignacio

Ответ №1:

Транзакции, созданные в первичной реплике, должны быть сначала совершены в синхронной вторичной реплике.

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

Запросы Select получают общие блокировки таблиц, которые не позволяют другим запросам выполнять изменения.

Запросы на читаемые вторичные файлы выполняются в режиме изоляции моментальных снимков независимо от уровня изоляции сеанса. Операции DML доступны только для чтения и не будут блокировать потоки повтора. Запросы получают блокировки стабильности общей схемы для предотвращения одновременных операций DDL, поэтому блокировку может вызвать только DDL (от основного).