|
Always On Синхронный режим
|
|||
---|---|---|---|
#18+
Добрый день. Имеются два инстанса с Always On в синхронном режиме. Вторичная нода используется для чтения. Есть проблема, что клиентское приложение меняет данные в таблице, потом делает селект к ноде для чтения и иногда измененных данных там нет. При запросе к основном ноде - данные имеются. Грязное чтение не используется. Для асинхронного режима такое поведение не удивило бы, но в синхронном вроде такого не должно быть. Есть некоторая вероятность, что проблема на стороне приложения, но пока рассматриваю причины на стороне MS SQL Server. Возможно не совсем верно понят механизм подтверждения транзакции в синхронном режиме. "В режиме синхронной фиксации транзакции не отправляют клиенту подтверждение, пока вторичная реплика не зафиксирует журнал на диск." В статье Microsoft по вторичным репликам есть информация о возможных задержках, при этом там нет уточнений по режиму фиксации. "Применение доступа только для чтения ко вторичным репликам полезно, если для нагрузок, связанных с операциями с ними, приемлема некоторая задержка данных." "Из основной реплики выполняется отправка журнала изменений в базе данных-источнике на вторичные реплики. На каждой базе данных-получателе выделенный поток повтора применяет записи журнала. В базе данных, доступной для чтения, каждое изменение данных не появляется среди результатов запроса до тех пор, пока запись журнала о данном изменении не будет применена к базе данных-получателю, а транзакция не будет зафиксирована в базе данных-источнике. Это означает, что между первичной и вторичной репликами возникает некоторая задержка, обычно порядка нескольких секунд. В нетипичных случаях, например в ситуации, когда проблемы с сетью ухудшают пропускную способность, задержка может стать значительной." Изначально механизм синхронной фиксации был понят, как отправка подтверждения транзакции после записи на вторичных нодах в БД и на диск, но похоже тут скорее шла речь про запись в логи для дальнейшей накатки изменений на БД, больше со стороны отказоустойчивости. Кто-то сталкивался\проверял как точно работает синхронный режим? И насколько там действительно могут запаздывать изменения на вторичной ноде после подтверждения транзакции? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2020, 16:47 |
|
Always On Синхронный режим
|
|||
---|---|---|---|
#18+
Синхронный режим означает только подтверждение записи в лог на вторичных репликах. Никакого контроля, когда транзакции из лога применятся на торичной реплике, нет. Они могут применяться более-менее сразу, а могут на часы или дни запаздывать. Это все, кстати, видно в дашбоде Awlways On и dmv. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2020, 16:54 |
|
Always On Синхронный режим
|
|||
---|---|---|---|
#18+
Гавриленко Сергей Алексеевич Синхронный режим означает только подтверждение записи в лог на вторичных репликах. Это все, кстати, видно в дашбоде Awlways On и dmv. Понятно, значит всё таки вариант, что не поняли, когда реально идёт подтверждение. А можно поподробнее с дашбордом always on? Если не во время сбоя, то там обычно всегда статус synchronized и no data loss. Или там нужно дополнительные столбцы включить? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2020, 17:05 |
|
Always On Синхронный режим
|
|||
---|---|---|---|
#18+
Danion, в синхронном режиме транзакция ожидает фиксацию на вторичной реплике и только после подтверждения закрывает фиксацию и отправляет сообщение клиенту. То есть если на первичной реплике вы приказали завершить транзакцию, то после завершения фиксации на первичной реплике на вторичной реплике вы можете читать на ней зафиксированные данные. Если вы будете читать из открытой транзакции, то новых данных не обнаружите. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2020, 17:46 |
|
Always On Синхронный режим
|
|||
---|---|---|---|
#18+
В асинхронном режиме подтверждение фиксации также присылается на первичную реплику и это дает возможность усечения журнала транзакций после резервного копирования. Но транзакция обрабатывает фиксацию на первичной не дожидаясь этого подтверждения. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2020, 17:50 |
|
Always On Синхронный режим
|
|||
---|---|---|---|
#18+
Владислав Колосов Danion, в синхронном режиме транзакция ожидает фиксацию на вторичной реплике и только после подтверждения закрывает фиксацию и отправляет сообщение клиенту. То есть если на первичной реплике вы приказали завершить транзакцию, то после завершения фиксации на первичной реплике на вторичной реплике вы можете читать на ней зафиксированные данные. Если вы будете читать из открытой транзакции, то новых данных не обнаружите. Выше уже писали. Единственное, что гарантирует синхронный режим, это синхронную доставку транзакции до лога вторичной реплике в момент коммита. Никакого синхронного коммита на вторичную реплику нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2020, 17:51 |
|
Always On Синхронный режим
|
|||
---|---|---|---|
#18+
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? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2020, 18:10 |
|
Always On Синхронный режим
|
|||
---|---|---|---|
#18+
Владислав Колосов 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. Получив подтверждение от вторичной реплики, первичная реплика завершает обработку фиксации и отправляет клиенту сообщение с подтверждением. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2020, 18:14 |
|
Always On Синхронный режим
|
|||
---|---|---|---|
#18+
Гавриленко Сергей Алексеевич, а, против этого у меня нет возражений. Восстановление лога как раз может занять время. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2020, 18:16 |
|
Always On Синхронный режим
|
|||
---|---|---|---|
#18+
Владислав Колосов Гавриленко Сергей Алексеевич, а, против этого у меня нет возражений. Восстановление лога как раз может занять время. Из-за чего вот это не верно Владислав Колосов после завершения фиксации на первичной реплике на вторичной реплике вы можете читать на ней зафиксированные данные ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2020, 18:22 |
|
Always On Синхронный режим
|
|||
---|---|---|---|
#18+
Гавриленко Сергей Алексеевич Еще раз. Чтобы на первичной реплике произошел commit, достаточно, чтобы весь лог транзакции попал на вторичные реплики в лог. После этого лог на вторичной реплике может применяться неопределенное и ничем не ограниченное количество времени, и только после того, как лог применится, эти данные можно будет прочитать. А в чем может быть проблема наката самих данных на вторичной реплике после фиксации записи в журнале транзакций на вторичной реплике? И вообще, где можно почитать про то, что происходит на вторичной реплике после фиксации транзакции в журнале, как комитятся сами данные? В BOL нашел только описание процесса до фиксации в журнале транзакций ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2020, 00:11 |
|
Always On Синхронный режим
|
|||
---|---|---|---|
#18+
OblomА в чем может быть проблема наката самих данных на вторичной реплике после фиксации записи в журнале транзакций на вторичной реплике?Не хватает ресурсов, например. Или самый смак -- то, что на первичной реплике меняло в n-дцать потоков, на вторичке применяется в один OblomИ вообще, где можно почитать про то, что происходит на вторичной реплике после фиксации транзакции в журнале, как комитятся сами данные? В BOL нашел только описание процесса до фиксации в журнале транзакцийИдет асинхронный процесс redo, который читает лог, меняет данные в базе реплики в соответствии с тем, что в логе, и делает чекпоинт... если в логе встретит соответствующую команду. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2020, 02:17 |
|
|
start [/forum/topic.php?fid=46&msg=40012769&tid=1685390]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 157ms |
0 / 0 |