У меня есть база данных SQL Server 2014, настроенная как синхронная группа доступности AlwaysOn.Грязные чтения в SQL Server AlwaysOn
Оба сервера установлены в режим доступности Synchronous commit
с таймаутом сеанса 50 секунд. Вторичным является Read-intent only
читаемый вторичный.
Если я пишу на первичный, а затем сразу читаю из вторичного (через ApplicationIntent=ReadOnly
), я последовательно читаю грязные данные (то есть состояние перед записью). Если я буду ждать около секунды между написанием и чтением, я получаю правильные данные.
Ожидается ли такое поведение? Если да, есть ли что-то, что я могу сделать, чтобы убедиться, что чтения из вторичного являются актуальными?
Я бы хотел использовать вторичную версию первичной версии (как и для отказа) для чтения, чтобы уменьшить нагрузку на основной.
Вероятно лучше для HTTP://dba.stackexchange.com/ – Liam
Это не «грязное чтение», это просто латентность. Читайте здесь: https://blogs.msdn.microsoft.com/sqlserverstorageengine/2011/12/22/alwayson-readable-secondary-and-data-latency/ – dean
См. Http://dba.stackexchange.com/questions/84420/does-synchronous-commit-availability-mode-обеспечить-согласованность между репликами. Короче: да, это ожидается, и если вы не можете терпеть * любую * латентность, прочитайте с первичной.Вы могли бы придумать свой собственный механизм для обеспечения того, чтобы ваши чтения были актуальными (таблица времени с триггером или подобным), но в большинстве случаев это было бы больше неприятностей, чем его ценность. Не следует, в любом случае, слепо смешивать реплики в одной рабочей нагрузке в ожидании их синхронизации. –