powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Always On Синхронный режим
12 сообщений из 12, страница 1 из 1
Always On Синхронный режим
    #40012722
Danion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Имеются два инстанса с Always On в синхронном режиме. Вторичная нода используется для чтения.
Есть проблема, что клиентское приложение меняет данные в таблице, потом делает селект к ноде для чтения и иногда измененных данных там нет. При запросе к основном ноде - данные имеются. Грязное чтение не используется.
Для асинхронного режима такое поведение не удивило бы, но в синхронном вроде такого не должно быть. Есть некоторая вероятность, что проблема на стороне приложения, но пока рассматриваю причины на стороне MS SQL Server.

Возможно не совсем верно понят механизм подтверждения транзакции в синхронном режиме.
"В режиме синхронной фиксации транзакции не отправляют клиенту подтверждение, пока вторичная реплика не зафиксирует журнал на диск."

В статье Microsoft по вторичным репликам есть информация о возможных задержках, при этом там нет уточнений по режиму фиксации. "Применение доступа только для чтения ко вторичным репликам полезно, если для нагрузок, связанных с операциями с ними, приемлема некоторая задержка данных."
"Из основной реплики выполняется отправка журнала изменений в базе данных-источнике на вторичные реплики. На каждой базе данных-получателе выделенный поток повтора применяет записи журнала. В базе данных, доступной для чтения, каждое изменение данных не появляется среди результатов запроса до тех пор, пока запись журнала о данном изменении не будет применена к базе данных-получателю, а транзакция не будет зафиксирована в базе данных-источнике.

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

Изначально механизм синхронной фиксации был понят, как отправка подтверждения транзакции после записи на вторичных нодах в БД и на диск, но похоже тут скорее шла речь про запись в логи для дальнейшей накатки изменений на БД, больше со стороны отказоустойчивости.
Кто-то сталкивался\проверял как точно работает синхронный режим? И насколько там действительно могут запаздывать изменения на вторичной ноде после подтверждения транзакции?
...
Рейтинг: 0 / 0
Always On Синхронный режим
    #40012734
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Синхронный режим означает только подтверждение записи в лог на вторичных репликах.

Никакого контроля, когда транзакции из лога применятся на торичной реплике, нет. Они могут применяться более-менее сразу, а могут на часы или дни запаздывать. Это все, кстати, видно в дашбоде Awlways On и dmv.
...
Рейтинг: 0 / 0
Always On Синхронный режим
    #40012738
Danion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гавриленко Сергей Алексеевич
Синхронный режим означает только подтверждение записи в лог на вторичных репликах.
Это все, кстати, видно в дашбоде Awlways On и dmv.

Понятно, значит всё таки вариант, что не поняли, когда реально идёт подтверждение.
А можно поподробнее с дашбордом always on? Если не во время сбоя, то там обычно всегда статус synchronized и no data loss. Или там нужно дополнительные столбцы включить?
...
Рейтинг: 0 / 0
Always On Синхронный режим
    #40012765
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Danion,

в синхронном режиме транзакция ожидает фиксацию на вторичной реплике и только после подтверждения закрывает фиксацию и отправляет сообщение клиенту. То есть если на первичной реплике вы приказали завершить транзакцию, то после завершения фиксации на первичной реплике на вторичной реплике вы можете читать на ней зафиксированные данные. Если вы будете читать из открытой транзакции, то новых данных не обнаружите.
...
Рейтинг: 0 / 0
Always On Синхронный режим
    #40012769
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В асинхронном режиме подтверждение фиксации также присылается на первичную реплику и это дает возможность усечения журнала транзакций после резервного копирования. Но транзакция обрабатывает фиксацию на первичной не дожидаясь этого подтверждения.
...
Рейтинг: 0 / 0
Always On Синхронный режим
    #40012770
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
Danion,

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

Выше уже писали. Единственное, что гарантирует синхронный режим, это синхронную доставку транзакции до лога вторичной реплике в момент коммита. Никакого синхронного коммита на вторичную реплику нет.
...
Рейтинг: 0 / 0
Always On Синхронный режим
    #40012784
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex,

я о чем и написал - транзакция на первичной не фиксируется, пока не получит сообщение о доставке.

https://docs.microsoft.com/ru-ru/sql/database-engine/availability-groups/windows/availability-modes-always-on-availability-groups?view=sql-server-ver15#SyncCommitAvMode

Как синхронизация работает на вторичной реплике
4. Получив подтверждение от вторичной реплики, первичная реплика завершает обработку фиксации и отправляет клиенту сообщение с подтверждением.

Какому клиенту? Вторичной реплике или SPID?
...
Рейтинг: 0 / 0
Always On Синхронный режим
    #40012789
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
msLex,

я о чем и написал - транзакция на первичной не фиксируется, пока не получит сообщение о доставке.

https://docs.microsoft.com/ru-ru/sql/database-engine/availability-groups/windows/availability-modes-always-on-availability-groups?view=sql-server-ver15#SyncCommitAvMode

Как синхронизация работает на вторичной реплике
4. Получив подтверждение от вторичной реплики, первичная реплика завершает обработку фиксации и отправляет клиенту сообщение с подтверждением.
Еще раз. Чтобы на первичной реплике произошел commit, достаточно, чтобы весь лог транзакции попал на вторичные реплики в лог. После этого лог на вторичной реплике может применяться неопределенное и ничем не ограниченное количество времени, и только после того, как лог применится, эти данные можно будет прочитать.
...
Рейтинг: 0 / 0
Always On Синхронный режим
    #40012790
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич,

а, против этого у меня нет возражений. Восстановление лога как раз может занять время.
...
Рейтинг: 0 / 0
Always On Синхронный режим
    #40012793
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
Гавриленко Сергей Алексеевич,

а, против этого у меня нет возражений. Восстановление лога как раз может занять время.

Из-за чего вот это не верно


Владислав Колосов
после завершения фиксации на первичной реплике на вторичной реплике вы можете читать на ней зафиксированные данные
...
Рейтинг: 0 / 0
Always On Синхронный режим
    #40020931
Oblom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич
Еще раз. Чтобы на первичной реплике произошел commit, достаточно, чтобы весь лог транзакции попал на вторичные реплики в лог. После этого лог на вторичной реплике может применяться неопределенное и ничем не ограниченное количество времени, и только после того, как лог применится, эти данные можно будет прочитать.


А в чем может быть проблема наката самих данных на вторичной реплике после фиксации записи в журнале транзакций на вторичной реплике?
И вообще, где можно почитать про то, что происходит на вторичной реплике после фиксации транзакции в журнале, как комитятся сами данные?
В BOL нашел только описание процесса до фиксации в журнале транзакций
...
Рейтинг: 0 / 0
Always On Синхронный режим
    #40020942
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OblomА в чем может быть проблема наката самих данных на вторичной реплике после фиксации записи в журнале транзакций на вторичной реплике?Не хватает ресурсов, например. Или самый смак -- то, что на первичной реплике меняло в n-дцать потоков, на вторичке применяется в один
OblomИ вообще, где можно почитать про то, что происходит на вторичной реплике после фиксации транзакции в журнале, как комитятся сами данные?
В BOL нашел только описание процесса до фиксации в журнале транзакцийИдет асинхронный процесс redo, который читает лог, меняет данные в базе реплики в соответствии с тем, что в логе, и делает чекпоинт... если в логе встретит соответствующую команду.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Always On Синхронный режим
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]