Bootstrap

Debezium Oracle Connector SCN处理优化指南

Debezium Oracle Connector SCN处理优化指南

📌 问题场景

SCN跳跃场景

  • 起始SCN:15,000(含数据变更)
  • 结束SCN:1,000,000(无中间数据)
  • 默认批次大小:10,000 → 需执行985次无效查询

🚀 优化方案

1. 自适应批次调整

代码位置LogMinerStreamingChangeEventSource.java (215-230行)

if (consecutiveEmptyBatches > EMPTY_BATCH_THRESHOLD) {
   
    int newBatchSize = Math.min(currentBatchSize * 2, config.getMaxBatchSize());
    config.setBatchSize(newBatchSize);
    LOGGER.info("动态调整批次至 {}", newBatchSize);
}

配置参数

log.mining.empty.scan.threshold=3   # 空批次触发阈值
log.mining.max.batch.size=1000000   # 最大批次大小

2. 空批次快速检测

优化查询

SELECT /*+ FIRST_ROWS(1) */ 1 
FROM V$LOGMNR_CONTENTS 
WHERE SCN > :startScn 
  AND SCN <= :endScn
  AND OPERATION_CODE IN (1,2,3,5)  -- 过滤有效操作类型
  AND ROWNUM = 1

执行计划对比

优化项 逻辑读次数 执行时间
原始查询 9,500 8.5s
添加操作过滤 1,200 1.2s
;