【问题标题】:Change Capture Tables (CDC-CT) updates are stalled for hours变更捕获表 (CDC-CT) 更新停滞数小时
【发布时间】:2018-01-16 20:22:40
【问题描述】:

我的数据库启用了 CDC,并且更改捕获工作正常,直到两周前 CT 表仅在 3 到 4 小时内更新一次。

版本:SQL Server 11.0.5613

我尝试过的事情: 1.停止并重新启动捕获作业 2. 重新启动 SQL Server 进程。 3. 尝试捕获延迟(发现更新在CT表中仅4小时批量填充一次) 4. 尝试将@maxtrans 增加到 1000,但这确实使系统赶上了。它仍然在 4 小时内运行一次。

我根据以下输出做了一些研究:

exec sys.sp_cdc_help_jobs

这里的 maxtrans 是指每个扫描周期正在处理的事务数。 (从 500 增加到 1000)。它与正在处理的 log_records 的数量不同。如果您查看 tran_count 列,它是“sys.dm_cdc_log_scan_sessions”表中正在处理的事务数,您会看到它始终低于 500。(session_id = 0 显示 1052,因为它是一个特殊条目,表示所有自 1 月 7 日服务器重新启动以来处理的事务。) 所以我不确定问题是否出在 maxtrans 上。

SELECT latency, empty_scan_count, * FROM sys.dm_cdc_log_scan_sessions order by end_time desc

从这个分析看来,这项工作在 4 小时内什么都不做,或者在四个小时内什么都不做(这似乎不太可能)。然后处理直到那个时间的所有更新,然后停止 4 小时。 唯一与此一致的是事务日志备份作业的频率,该作业在上午 12:00 到晚上 11:59 之间每 4 小时运行一次。我不确定它们是否以某种方式相关。我试图改变工作的频率并查看影响。它没有任何影响。

任何指针都会有很大帮助。

【问题讨论】:

  • 无论是否相关,每 4 小时运行一次日志备份似乎不够频繁。您是否尝试更频繁地运行它们以查看对您的 CDC 性能有什么(如果有)影响?
  • 我尝试每小时运行一次日志,它对日志扫描会话的时间签名没有影响。 -- 它只是有相同的 4 小时模式。

标签: sql-server sql-server-2008 change-data-capture


【解决方案1】:

辅助节点已添加到可用性组。 此服务器已添加,但服务器上没有设置数据库。当记录被写入主节点时,它会尝试将其传播到所有辅助节点。由于无法成功执行此操作,因此日志从未正式硬化,这意味着 cdc 永远不会拾取它。 Cdc 一直在等待事务完成,这就是为什么没有在捕获作业上完成任何工作,它只是挂在那里。当这个超时的时候,就是记录最终被记录到捕获表中的时候,但是到那时,已经4个小时了!

【讨论】:

  • 这是您问题的答案吗?我只是问,因为这似乎更像是对您的问题的附加评论。如果不是答案,请将此信息编辑到您的问题中,然后删除此答案。
  • 这是问题的答案,其中也解释了根本原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-15
相关资源
最近更新 更多