Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
15.09.2015, 16:35
|
|||
---|---|---|---|
rowversion и пропуски записей |
|||
#18+
Есть такая проблема у нас. Долгое время писался ETL, завязанный на rowversion. А именно, если надо инкрементально выгрузить данные, то брался последний уже загруженный rowversion и по нему выгружались записи имеющие больший по величине rowversion. В какой-то момент обнаружилась проблема: есть пропуски в записях. И связано это, судя по всему, с тем, что данные выгружаются с реплики, а нее из фактической первой БД. Скажу сразу, что исходная БД очень высок нагружена и нами не контролируется. Дали реплику нам и сказали выгружать с неё. Так вот rowversion-ы приходят на реплику не всегда в той последовательности, в какой они возникли в исходной. Как я понимаю, это связано с транзакциями. Одна транзакция создала запись и но ещё не закоммитила её, а другая транзакция создала запись позже, но уже закоммитила ей. Теперь вопрос. Мы взяли в таблицы X последний @MAX_RV = MAX(rowversion). Существует ли способ убедиться в том, что все записи с rowversion <= @MAX_RV поступили на реплику? Или существует ли способ взять rowversion, до которого все записи уже точно поступили на реплику? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
15.09.2015, 16:41
|
|||
---|---|---|---|
rowversion и пропуски записей |
|||
#18+
а с чего вы решили , что rowversion вам поможет пропуски избежать? https://msdn.microsoft.com/ru-ru/library/ms182776(v=sql.120).aspx ... |
|||
:
Нравится:
Не нравится:
|
|||
|
15.09.2015, 16:45
|
|||
---|---|---|---|
rowversion и пропуски записей |
|||
#18+
Konst_Oneа с чего вы решили , что rowversion вам поможет пропуски избежать? https://msdn.microsoft.com/ru-ru/library/ms182776(v=sql.120).aspx Так решили те, кто начинал писать ETL. В том, что теперь с этим можно сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
15.09.2015, 16:48
|
|||
---|---|---|---|
rowversion и пропуски записей |
|||
#18+
видимо нужен столбец с временем обновления конкретной записи в таблице ... |
|||
:
Нравится:
Не нравится:
|
|||
|
15.09.2015, 17:03
|
|||
---|---|---|---|
rowversion и пропуски записей |
|||
#18+
a_voroninВот эта штука поможет? https://msdn.microsoft.com/en-us/library/bb839514.aspx похоже , что поможет. сам не использовал такие техники. так что , проверяйте ... |
|||
:
Нравится:
Не нравится:
|
|||
|
15.09.2015, 17:06
|
|||
---|---|---|---|
|
|||
rowversion и пропуски записей |
|||
#18+
a_voronin, У вас на реплику приходит rowversion с Паблишера - или локальный ? если с Паблишера - рассмотрите вариант локального rowversion (табличка рассширется на одно поле) У вас транзакционная репликация ? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
15.09.2015, 17:22
|
|||
---|---|---|---|
rowversion и пропуски записей |
|||
#18+
-=Гость=-a_voronin, У вас на реплику приходит rowversion с Паблишера - или локальный ? если с Паблишера - рассмотрите вариант локального rowversion (табличка рассширется на одно поле) У вас транзакционная репликация ? Это AwaysOn SQL 2012 -- честно говоря, в подробности того как это настроена не вникал, потому что источник это не моя система. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
15.09.2015, 17:41
|
|||
---|---|---|---|
|
|||
rowversion и пропуски записей |
|||
#18+
a_voronin, Ясно, тогда всё верно - такая проблема была с timestamp помоему у вас rowversion приходит с мастер базы и не имееет отношения к локальной @@DBTS ... |
|||
:
Нравится:
Не нравится:
|
|||
|
15.09.2015, 17:49
|
|||
---|---|---|---|
|
|||
rowversion и пропуски записей |
|||
#18+
-=Гость=-, Мне кажется здесь примерно ваша проблема описана 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 репликой нет. Подсказать не смогу. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.01.2020, 09:16
|
|||
---|---|---|---|
rowversion и пропуски записей |
|||
#18+
a_voronin Старая ссылка не работает, работает вот эта. a_voronin Хочу уточнить -- если делать инкрементальную выгрузку по rowversion с реплики и не выходить за min_active_rowversion(), то есть грузить только то, что < min_active_rowversion(), то есть ли гарантия, что записи не будут пропущены. Если какая то запись с rowversion < min_active_rowversion(), будет доставлена уже после того, как вы выгрузили записи rowversion < min_active_rowversion(), то вы её уже не выгрузите. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.01.2020, 09:16
|
|||
---|---|---|---|
rowversion и пропуски записей |
|||
#18+
a_voronin Хочу уточнить -- если делать инкрементальную выгрузку по rowversion с реплики и не выходить за min_active_rowversion(), то есть грузить только то, что < min_active_rowversion(), то есть ли гарантия, что записи не будут пропущены. Да, гарантия (в рамках sql server без багов) есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.01.2020, 10:18
|
|||
---|---|---|---|
rowversion и пропуски записей |
|||
#18+
a_voronin, авторХочу уточнить -- если делать инкрементальную выгрузку по rowversion с реплики и не выходить за min_active_rowversion(), то есть грузить только то, что < min_active_rowversion(), то есть ли гарантия, что записи не будут пропущены. да, главеное что бы источник не был репликой :) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.01.2020, 11:22
|
|||
---|---|---|---|
rowversion и пропуски записей |
|||
#18+
TaPaK a_voronin, авторХочу уточнить -- если делать инкрементальную выгрузку по rowversion с реплики и не выходить за min_active_rowversion(), то есть грузить только то, что < min_active_rowversion(), то есть ли гарантия, что записи не будут пропущены. да, главеное что бы источник не был репликой :) А вот это проблема -- источник реплика и вопрос как раз про min_active_rowversion() на реплике. Но насколько мой опыт говорит, записи не пропускаются. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.01.2020, 11:24
|
|||
---|---|---|---|
rowversion и пропуски записей |
|||
#18+
a_voronin TaPaK a_voronin, пропущено... да, главеное что бы источник не был репликой :) А вот это проблема -- источник реплика и вопрос как раз про min_active_rowversion() на реплике. Но насколько мой опыт говорит, записи не пропускаются. на реплике не тот min_active_rowversion хотя тут скорее вопрос какая реплика ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.01.2020, 12:15
|
|||
---|---|---|---|
rowversion и пропуски записей |
|||
#18+
TaPaK a_voronin пропущено... А вот это проблема -- источник реплика и вопрос как раз про min_active_rowversion() на реплике. Но насколько мой опыт говорит, записи не пропускаются. на реплике не тот min_active_rowversion хотя тут скорее вопрос какая реплика ALWAYSON ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.01.2020, 12:21
|
|||
---|---|---|---|
rowversion и пропуски записей |
|||
#18+
a_voronin TaPaK пропущено... на реплике не тот min_active_rowversion хотя тут скорее вопрос какая реплика ALWAYSON там не те дроиды. на secondary @@DBTS и min_row_active можно использовать только например сохраняя в таблицу на primary и опираясь на эти значения на secondary. "Подряд" rowversion не будут понятное дело ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.01.2020, 12:36
|
|||
---|---|---|---|
rowversion и пропуски записей |
|||
#18+
что в общем странно в вашем вапросе, если вы сами это уже упоминали :) 18929494 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.01.2020, 12:41
|
|||
---|---|---|---|
rowversion и пропуски записей |
|||
#18+
TaPaK что в общем странно в вашем вапросе, если вы сами это уже упоминали :) 18929494 Я вернулся к этой теме. Есть несколько мест, где говорят, что "нет не герантирует", но кто проводил тесты? И на практике мы читали с реплике и пропусков как ни странно не было. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.01.2020, 12:44
|
|||
---|---|---|---|
rowversion и пропуски записей |
|||
#18+
a_voronin TaPaK что в общем странно в вашем вапросе, если вы сами это уже упоминали :) 18929494 Я вернулся к этой теме. Есть несколько мест, где говорят, что "нет не герантирует", но кто проводил тесты? И на практике мы читали с реплике и пропусков как ни странно не было. у нас тоже долго не было :) Это же вопрос стечения нескольких факторов во времени ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.01.2020, 12:48
|
|||
---|---|---|---|
rowversion и пропуски записей |
|||
#18+
a_voronin TaPaK что в общем странно в вашем вапросе, если вы сами это уже упоминали :) 18929494 Я вернулся к этой теме. Есть несколько мест, где говорят, что "нет не герантирует", но кто проводил тесты? И на практике мы читали с реплике и пропусков как ни странно не было. Хмм, провел натурный эксперемент (синхронная реплика), и да проблемы с пропусками могут быть. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.01.2020, 12:58
|
|||
---|---|---|---|
rowversion и пропуски записей |
|||
#18+
TaPaK a_voronin пропущено... Я вернулся к этой теме. Есть несколько мест, где говорят, что "нет не герантирует", но кто проводил тесты? И на практике мы читали с реплике и пропусков как ни странно не было. у нас тоже долго не было :) Это же вопрос стечения нескольких факторов во времени Каких? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.01.2020, 13:03
|
|||
---|---|---|---|
rowversion и пропуски записей |
|||
#18+
a_voronin TaPaK пропущено... у нас тоже долго не было :) Это же вопрос стечения нескольких факторов во времени Каких? как-то так Старт транзакции 1 получение stamp 1 Старт транзакции 2 получение stamp 2 COMMIT 2 в синхроной она уж уезжает, в асинхронной как пойдёт в сей момент вы отгребаете все что было с полследней синхронизации и столбите стемп 2 что бы с него начать COMMIT 1 тут уже при отборе стемп 1 не доступен ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.01.2020, 13:06
|
|||
---|---|---|---|
rowversion и пропуски записей |
|||
#18+
a_voronin TaPaK пропущено... у нас тоже долго не было :) Это же вопрос стечения нескольких факторов во времени Каких? описываю последовательность шагов 1. создаем таблицу в базе Код: sql 1.
2. в первом коннекте выполняем Код: sql 1. 2. 3.
коннект не закрываем 3. во втором коннекте выполняем Код: sql 1. 2. 3. 4.
4. на реплики читаем все, что меньше "активных rowversion" (нужно дождаться передачи данных) Код: sql 1.
и видим запись с f = 2 и запоминаем его id 5. в коннете из пункта 2 (там где вставка f=1) делаем commit и дожидаемся появления этой записи на реплике. убеждаемся, что id у нее меньше, чем у записи с f=2, а значит на шаге 4 мы пропустили f=1 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=46&mobile=1&tid=1686610]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 153ms |
0 / 0 |