#sql-server #transactions #locking #alwayson
Вопрос:
Обычно рекомендуется перенаправлять запросы select на вторичную реплику, объявляя соединения доступными только для чтения. Но у меня есть сомнения на этот счет.
Я знаю два факта:
- Транзакции, созданные в первичной реплике, должны быть сначала совершены в синхронной вторичной реплике.
- Запросы Select получают общие блокировки таблиц, которые не позволяют другим запросам выполнять изменения.
Означает ли это, что выбор запросов в подключениях только для чтения, которые могут быть отправлены во вторичную реплику для повышения производительности, на самом деле может повлиять на общую производительность, так как они были выполнены в первичной реплике?
Обратите внимание, что это произойдет только с синхронными репликами, а не с асинхронными.
Заранее спасибо,
Ignacio
Ответ №1:
Транзакции, созданные в первичной реплике, должны быть сначала совершены в синхронной вторичной реплике.
Чтобы уточнить, журнал транзакций укрепляется на синхронном вторичном сервере, когда основная транзакция фиксируется, но именно потоки повтора на вторичном сервере применяют изменения к реплике. Фиксация на основной не ожидает завершения повтора.
Запросы Select получают общие блокировки таблиц, которые не позволяют другим запросам выполнять изменения.
Запросы на читаемые вторичные файлы выполняются в режиме изоляции моментальных снимков независимо от уровня изоляции сеанса. Операции DML доступны только для чтения и не будут блокировать потоки повтора. Запросы получают блокировки стабильности общей схемы для предотвращения одновременных операций DDL, поэтому блокировку может вызвать только DDL (от основного).