SQL Server CDC: как __ $ seqval работает под прикрытием? - PullRequest
0 голосов
/ 27 февраля 2019

Относительно значений __$seqval мы делаем следующие предположения:

  1. количество уникальных __$seqval значений в таблице CDC будет равно количеству строк.
  2. упорядочениевыбор из таблицы CDC на __$seqval точно воспроизведет порядок транзакций и операций внутри транзакций в том виде, в каком они отображаются в таблице CDC.

Верны ли эти предположения или вы можете только заказать данные CDCвключая оба запуска LSN и seqval?

Спасибо и всего наилучшего!

1 Ответ

0 голосов
/ 01 мая 2019

Для № 1, я не уверен, но я бы не стал делать это предположение.Я видел повторяющиеся значения последовательности в разных таблицах в связанных транзакциях с немного отличающимися начальными номерами LSN.Я никогда не замечал дубликатов в одной и той же таблице, но это не значит, что это не может произойти.

Что касается ваших общих ожиданий, используйте комбинацию всех четырех значений последовательности , чтобы получитьдетерминированный список транзакций и операций внутри них.Я склонен использовать:

ORDER BY __$start_lsn ASC, __$seqval ASC, __$command_id ASC, __$operation ASC

Для более официального заказа, вот определение кластерного индекса на моих серверах для каждой таблицы CDC, сгенерированное, когда CDC включен для этой таблицы:

CREATE UNIQUE CLUSTERED INDEX ... (
    [__$start_lsn] ASC,
    [__$command_id] ASC,
    [__$seqval] ASC,
    [__$operation] ASC
)

Некластеризованный индекс, включающий первичный ключ исходной таблицы, аналогичен.

Предупреждения с __$command_id:

...