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 <= :endScnAND OPERATION_CODE IN (1,2,3,5) -- 过滤有效操作类型AND ROWNUM = 1
执行计划对比:
优化项 | 逻辑读次数 | 执行时间 |
---|---|---|
原始查询 | 9,500 | 8.5s |
添加操作过滤 | 1,200 | 1.2s |