Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / rowversion и пропуски записей / 25 сообщений из 30, страница 1 из 2
15.09.2015, 16:35
    #39052030
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rowversion и пропуски записей
Есть такая проблема у нас. Долгое время писался ETL, завязанный на rowversion. А именно, если надо инкрементально выгрузить данные, то брался последний уже загруженный rowversion и по нему выгружались записи имеющие больший по величине rowversion.

В какой-то момент обнаружилась проблема: есть пропуски в записях. И связано это, судя по всему, с тем, что данные выгружаются с реплики, а нее из фактической первой БД. Скажу сразу, что исходная БД очень высок нагружена и нами не контролируется. Дали реплику нам и сказали выгружать с неё.

Так вот rowversion-ы приходят на реплику не всегда в той последовательности, в какой они возникли в исходной. Как я понимаю, это связано с транзакциями. Одна транзакция создала запись и но ещё не закоммитила её, а другая транзакция создала запись позже, но уже закоммитила ей.

Теперь вопрос. Мы взяли в таблицы X последний @MAX_RV = MAX(rowversion). Существует ли способ убедиться в том, что все записи с rowversion <= @MAX_RV поступили на реплику?

Или существует ли способ взять rowversion, до которого все записи уже точно поступили на реплику?
...
Рейтинг: 0 / 0
15.09.2015, 16:41
    #39052042
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rowversion и пропуски записей
а с чего вы решили , что rowversion вам поможет пропуски избежать?

https://msdn.microsoft.com/ru-ru/library/ms182776(v=sql.120).aspx
...
Рейтинг: 0 / 0
15.09.2015, 16:45
    #39052052
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rowversion и пропуски записей
Konst_Oneа с чего вы решили , что rowversion вам поможет пропуски избежать?

https://msdn.microsoft.com/ru-ru/library/ms182776(v=sql.120).aspx

Так решили те, кто начинал писать ETL. В том, что теперь с этим можно сделать?
...
Рейтинг: 0 / 0
15.09.2015, 16:48
    #39052061
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rowversion и пропуски записей
видимо нужен столбец с временем обновления конкретной записи в таблице
...
Рейтинг: 0 / 0
15.09.2015, 16:58
    #39052078
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rowversion и пропуски записей
Вот эта штука поможет?

https://msdn.microsoft.com/en-us/library/bb839514.aspx
...
Рейтинг: 0 / 0
15.09.2015, 17:03
    #39052091
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rowversion и пропуски записей
a_voroninВот эта штука поможет?

https://msdn.microsoft.com/en-us/library/bb839514.aspx

похоже , что поможет. сам не использовал такие техники. так что , проверяйте
...
Рейтинг: 0 / 0
15.09.2015, 17:06
    #39052095
-=Гость=-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rowversion и пропуски записей
a_voronin,

У вас на реплику приходит rowversion с Паблишера - или локальный ?

если с Паблишера - рассмотрите вариант локального rowversion (табличка рассширется на одно поле)

У вас транзакционная репликация ?
...
Рейтинг: 0 / 0
15.09.2015, 17:22
    #39052111
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rowversion и пропуски записей
-=Гость=-a_voronin,

У вас на реплику приходит rowversion с Паблишера - или локальный ?

если с Паблишера - рассмотрите вариант локального rowversion (табличка рассширется на одно поле)

У вас транзакционная репликация ?

Это AwaysOn SQL 2012 -- честно говоря, в подробности того как это настроена не вникал, потому что источник это не моя система.
...
Рейтинг: 0 / 0
15.09.2015, 17:41
    #39052135
-=Гость=-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rowversion и пропуски записей
a_voronin,

Ясно,
тогда всё верно - такая проблема была с timestamp
помоему у вас rowversion приходит с мастер базы и не имееет отношения к локальной @@DBTS
...
Рейтинг: 0 / 0
15.09.2015, 17:49
    #39052156
-=Гость=-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rowversion и пропуски записей
-=Гость=-,

Мне кажется здесь примерно ваша проблема описана

http://blogs.msdn.com/b/ialonso/archive/2015/05/08/how-is-dbts-expected-to-behave-on-an-always-on-availability-group-secondary-replica-a-database-mirroring-mirror-or-a-database-which-is-being-created-out-of-a-restored-backup-and-is-in-standby-or-in-recovery-state.aspx

К сожалению опыта с AlwaysOn репликой нет. Подсказать не смогу.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
23.01.2020, 08:57
    #39917659
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rowversion и пропуски записей
-=Гость=-
-=Гость=-,

Мне кажется здесь примерно ваша проблема описана

http://blogs.msdn.com/b/ialonso/archive/2015/05/08/how-is-dbts-expected-to-behave-on-an-always-on-availability-group-secondary-replica-a-database-mirroring-mirror-or-a-database-which-is-being-created-out-of-a-restored-backup-and-is-in-standby-or-in-recovery-state.aspx

К сожалению опыта с AlwaysOn репликой нет. Подсказать не смогу.



Старая ссылка не работает, работает вот эта.

https://blogs.msdn.microsoft.com/ialonso/2015/05/08/how-is-dbts-expected-to-behave-on-an-always-on-availability-group-secondary-replica-a-database-mirroring-mirror-or-a-database-which-is-being-created-out-of-a-restored-backup-and-is-in-standby-or-i/

Хочу уточнить -- если делать инкрементальную выгрузку по rowversion с реплики и не выходить за min_active_rowversion(), то есть грузить только то, что < min_active_rowversion(), то есть ли гарантия, что записи не будут пропущены.
...
Рейтинг: 0 / 0
23.01.2020, 09:16
    #39917675
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rowversion и пропуски записей
a_voronin
Старая ссылка не работает, работает вот эта.
Эта тоже не работает :-) 404
a_voronin
Хочу уточнить -- если делать инкрементальную выгрузку по rowversion с реплики и не выходить за min_active_rowversion(), то есть грузить только то, что < min_active_rowversion(), то есть ли гарантия, что записи не будут пропущены.
Разве не это же вы выясняли в этом топике 5 лет назад?
Если какая то запись с rowversion < min_active_rowversion(), будет доставлена уже после того, как вы выгрузили записи rowversion < min_active_rowversion(), то вы её уже не выгрузите.
...
Рейтинг: 0 / 0
23.01.2020, 09:16
    #39917676
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rowversion и пропуски записей
a_voronin
Хочу уточнить -- если делать инкрементальную выгрузку по rowversion с реплики и не выходить за min_active_rowversion(), то есть грузить только то, что < min_active_rowversion(), то есть ли гарантия, что записи не будут пропущены.

Да, гарантия (в рамках sql server без багов) есть.
...
Рейтинг: 0 / 0
23.01.2020, 10:18
    #39917706
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rowversion и пропуски записей
a_voronin,

авторХочу уточнить -- если делать инкрементальную выгрузку по rowversion с реплики и не выходить за min_active_rowversion(), то есть грузить только то, что < min_active_rowversion(), то есть ли гарантия, что записи не будут пропущены.

да, главеное что бы источник не был репликой :)
...
Рейтинг: 0 / 0
23.01.2020, 11:22
    #39917760
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rowversion и пропуски записей
TaPaK
a_voronin,

авторХочу уточнить -- если делать инкрементальную выгрузку по rowversion с реплики и не выходить за min_active_rowversion(), то есть грузить только то, что < min_active_rowversion(), то есть ли гарантия, что записи не будут пропущены.

да, главеное что бы источник не был репликой :)

А вот это проблема -- источник реплика и вопрос как раз про min_active_rowversion() на реплике. Но насколько мой опыт говорит, записи не пропускаются.
...
Рейтинг: 0 / 0
23.01.2020, 11:24
    #39917763
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rowversion и пропуски записей
a_voronin
TaPaK
a_voronin,

пропущено...

да, главеное что бы источник не был репликой :)


А вот это проблема -- источник реплика и вопрос как раз про min_active_rowversion() на реплике. Но насколько мой опыт говорит, записи не пропускаются.

на реплике не тот min_active_rowversion

хотя тут скорее вопрос какая реплика
...
Рейтинг: 0 / 0
23.01.2020, 12:15
    #39917799
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rowversion и пропуски записей
TaPaK
a_voronin
пропущено...


А вот это проблема -- источник реплика и вопрос как раз про min_active_rowversion() на реплике. Но насколько мой опыт говорит, записи не пропускаются.

на реплике не тот min_active_rowversion

хотя тут скорее вопрос какая реплика


ALWAYSON
...
Рейтинг: 0 / 0
23.01.2020, 12:21
    #39917808
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rowversion и пропуски записей
a_voronin
TaPaK
пропущено...

на реплике не тот min_active_rowversion

хотя тут скорее вопрос какая реплика


ALWAYSON

там не те дроиды. на secondary @@DBTS и min_row_active можно использовать только например сохраняя в таблицу на primary и опираясь на эти значения на secondary.
"Подряд" rowversion не будут понятное дело
...
Рейтинг: 0 / 0
23.01.2020, 12:36
    #39917823
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rowversion и пропуски записей
что в общем странно в вашем вапросе, если вы сами это уже упоминали :)
18929494
...
Рейтинг: 0 / 0
23.01.2020, 12:41
    #39917826
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rowversion и пропуски записей
TaPaK
что в общем странно в вашем вапросе, если вы сами это уже упоминали :)
18929494


Я вернулся к этой теме. Есть несколько мест, где говорят, что "нет не герантирует", но кто проводил тесты? И на практике мы читали с реплике и пропусков как ни странно не было.
...
Рейтинг: 0 / 0
23.01.2020, 12:44
    #39917831
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rowversion и пропуски записей
a_voronin
TaPaK
что в общем странно в вашем вапросе, если вы сами это уже упоминали :)
18929494


Я вернулся к этой теме. Есть несколько мест, где говорят, что "нет не герантирует", но кто проводил тесты? И на практике мы читали с реплике и пропусков как ни странно не было.

у нас тоже долго не было :)
Это же вопрос стечения нескольких факторов во времени
...
Рейтинг: 0 / 0
23.01.2020, 12:48
    #39917834
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rowversion и пропуски записей
a_voronin
TaPaK
что в общем странно в вашем вапросе, если вы сами это уже упоминали :)
18929494


Я вернулся к этой теме. Есть несколько мест, где говорят, что "нет не герантирует", но кто проводил тесты? И на практике мы читали с реплике и пропусков как ни странно не было.



Хмм, провел натурный эксперемент (синхронная реплика), и да проблемы с пропусками могут быть.
...
Рейтинг: 0 / 0
23.01.2020, 12:58
    #39917849
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rowversion и пропуски записей
TaPaK
a_voronin
пропущено...


Я вернулся к этой теме. Есть несколько мест, где говорят, что "нет не герантирует", но кто проводил тесты? И на практике мы читали с реплике и пропусков как ни странно не было.

у нас тоже долго не было :)
Это же вопрос стечения нескольких факторов во времени


Каких?
...
Рейтинг: 0 / 0
23.01.2020, 13:03
    #39917859
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rowversion и пропуски записей
a_voronin
TaPaK
пропущено...

у нас тоже долго не было :)
Это же вопрос стечения нескольких факторов во времени


Каких?

как-то так

Старт транзакции 1
получение stamp 1

Старт транзакции 2
получение stamp 2

COMMIT 2
в синхроной она уж уезжает, в асинхронной как пойдёт

в сей момент вы отгребаете все что было с полследней синхронизации и столбите стемп 2 что бы с него начать

COMMIT 1

тут уже при отборе стемп 1 не доступен
...
Рейтинг: 0 / 0
23.01.2020, 13:06
    #39917864
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rowversion и пропуски записей
a_voronin
TaPaK
пропущено...

у нас тоже долго не было :)
Это же вопрос стечения нескольких факторов во времени


Каких?


описываю последовательность шагов
1. создаем таблицу в базе
Код: sql
1.
create table dbo.test(id rowversion not null, f int not null)



2. в первом коннекте выполняем
Код: sql
1.
2.
3.
begin tran 
insert dbo.test(f)
select 1


коннект не закрываем

3. во втором коннекте выполняем

Код: sql
1.
2.
3.
4.
begin tran 
insert dbo.test(f)
select 2
commit




4. на реплики читаем все, что меньше "активных rowversion" (нужно дождаться передачи данных)
Код: sql
1.
select * from dbo.test where id < min_active_rowversion()


и видим запись с f = 2 и запоминаем его id


5. в коннете из пункта 2 (там где вставка f=1) делаем commit и дожидаемся появления этой записи на реплике.
убеждаемся, что id у нее меньше, чем у записи с f=2, а значит на шаге 4 мы пропустили f=1
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / rowversion и пропуски записей / 25 сообщений из 30, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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