powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Можно ли доступиться с Secondary Replica к данным на Primary Replica?
6 сообщений из 6, страница 1 из 1
Можно ли доступиться с Secondary Replica к данным на Primary Replica?
    #40041691
JustCurious
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день,

Возможно кто-то сталкивался с похожей проблемой и имеет элегантное решение.

В системе имеется функционал "ре-рендеринга" данных на UI, который завязан на сравнении версии данных в базе и версией, отображаемой на UI. Номер версии генерируется при помощи сиквенса (sys.sequences).

Поскольку сервера находятся в Availability Group (MS SQL 2016 (SP2)), для разгрузки решили перенаправить этот функционал на SECONDARY реплику, сделав её read-only. При вычитке текущего значения сиквенса данные на primary и secondary отличаются на размер кэша, указанного при создании сиквенса (secondary всегда впереди максимум на размер этого кэша). Из за этого функционал ре-рендеринга не работает должным образом.

Код: sql
1.
2.
3.
SELECT  s.current_value AS CurrentSequenceValue
FROM    sys.sequences as s
WHERE   name = 'CurrentTrackSeqNo'



Можно ли каким-то образом сделать так, чтобы при запуске хранимой процедуры, отвечающей за "ре-рендеринг", текущее значение сиквенса считывалось всегда с primary сервера?
...
Рейтинг: 0 / 0
Можно ли доступиться с Secondary Replica к данным на Primary Replica?
    #40041748
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JustCurious,

понятно, что Вы не хотите выдавать секреты, но описание ситуации и проблемы малоинформативно, по крайней мере, для меня.
...
Рейтинг: 0 / 0
Можно ли доступиться с Secondary Replica к данным на Primary Replica?
    #40041765
JustCurious
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов,

Секретов никаких нет )

Картина следующая. Допустим, размер кэша для сиквенса равен 5.
Значение сиквенса в sys.sequences на обеих репликах приведён ниже

PRIMARY SECONDARY
1 5
2 5
3 5
4 5
5 5
6 10
7 10
8 10
9 10
10 10
11 15

Пока прикрутил "костыль", который, выгребая текущее значение сиквенса на secondary реплике, делает поправку этого значения на размер кэша, чтоб не пропустить нужные данные, которые надо "ре-рендернуть"

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE FUNCTION dbo.XXX (@name sysname)
RETURNS TABLE AS RETURN
(
--if the function is called from secondary node, current_value should be corrected by cache_size
    SELECT CurrentSequenceValue = cast(s.current_value as bigint) - (iif(sys.fn_hadr_is_primary_replica(DB_NAME()) <> 1,cache_size,0))
    FROM sys.sequences as s with(nolock)
    WHERE s.name = @name
);
GO



В данном решении есть проблема, что ререндериться будет больше данных, чем надо, а приложением пользуется большое количество пользователей, что повысит нагрузку вцелом. Плюс, есть моменты, когда сиквенсы на обеих репликах совпадают (по крайней мере удалось этого добиться на тест-энвайронменте). Происходит это тогда, когда рендерить нечего в течение продолжительного времени и страницы со значениями сбрасываются на диск (на проде такое крайне маловероятно).
...
Рейтинг: 0 / 0
Можно ли доступиться с Secondary Replica к данным на Primary Replica?
    #40042363
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JustCurious,

а почему current_value оказывается кратно размеру кэша, а не тому значению которое реплицируется с первичной реплики?
...
Рейтинг: 0 / 0
Можно ли доступиться с Secondary Replica к данным на Primary Replica?
    #40042378
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JustCurious,

В целом, архитектурно -- лажа полная. Но закостылять можно отдельным коннектом, который всегда смотрит на primary и читает значение счетчика с нее.
...
Рейтинг: 0 / 0
Можно ли доступиться с Secondary Replica к данным на Primary Replica?
    #40042638
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич,

я так и не понял смысла этого решения, так как на реплике находятся целостные данные, которые невозможно изменять. Если система читает данные с реплики, то она читает согласованные данные. Зачем портить это чтением данных с первичной реплики - совершенно непонятно. Думаю, что само решение написано "враскорячку" - часть данных берет с первичной реплики, а часть - со вторичной. Это приводит к несогласованности данных, за такие решения архитектора надо гнать в шею с работы.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Можно ли доступиться с Secondary Replica к данным на Primary Replica?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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