繁体   English   中英

SQL Server CDC:__ $ seqval如何在后台运行?

[英]SQL Server CDC: How does __$seqval work under the covers?

关于__$seqval值,我们进行以下假设:

  1. CDC表中唯一__$seqval值的计数将等于行数。
  2. 通过__$seqval对CDC表中的选择进行排序将准确再现事务和事务在CDC表中出现时的顺序。

这些假设是正确的,还是只能通过同时包含启动LSN seqval来订购CDC数据?

谢谢和问候!

对于#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警告:

  • 某些版本的SQL Server不能正确订购它们。 但是,完全打补丁的系统应该没有问题。
  • 此列在生成的函数的输出中不可用,官方文档说您应该使用 这些函数为您做一些事情,最重要的是查询WITH (NOLOCK)以避免数据库争用,但是我自己的大多数代码却直接查询那些_CT表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM