update 下 tidb index merge 失效原因:
对 tidb 来说原 query where 条件是 A or B and C 这种结构。IndexMerge 要么只能做 And, 要么只能做 OR, 是不能同时做 and 和 or 的。所以才导致了这个问题。
和对不对称关系不大
想到一个 workround:
"where": "((created_at BETWEEN '2025-12-07' AND '2025-12-11') OR (modified_at BETWEEN '2025-12-07' AND '2025-12-11'))",
如果写的配置文件,还可以将条件多加个小括号解决。
explain format="verbose"
SELECT
MIN(id),
MAX(id)
FROM
`merchant_operation_log`
WHERE
((
(
created_at BETWEEN …
测试了下,tidb 即使修改条件对称也不行:
explain format="verbose"
SELECT /*+ USE_INDEX_MERGE(merchant_operation_log,idx_create_time,idx_modify_time) */
MIN(id),
MAX(id)
FROM
`merchant_operation_log`
WHERE
(
(
created_at BETWEEN date_sub(
str_to_date('20251210', '%Y%m%d'),
…
对比 MySQL:
explain format='json'
SELECT
MIN(id),
MAX(id)
FROM
`merchant_operation_log`
WHERE
(
(
created_at BETWEEN date_sub(
str_to_date('20251210', '%Y%m%d'),
INTERVAL 3 DAY
)
AND date_add(
str_to_date('20251210', '%Y%m%d'),
…
测试结果:
explain format="verbose"
SELECT
MIN(id),
MAX(id)
FROM
`merchant_operation_log`
WHERE
(
(
created_at BETWEEN date_sub(
str_to_date('20251210', '%Y%m%d'),
INTERVAL 3 DAY
)
AND date_add(
str_to_date('20251210', '%Y%m%d'),
…
新版本就别折腾 binlog 了,binlog 已经基本不维护了。
当前这个思路可以的。
至于存量的话,dumpling 可以的,会有一个 snapshot,cdc 用这个 tso 来增量同步数据即可。
存量 dumpling 导出 csv 导入 Doris 呗。
csv 可以压缩一下,跨网络传输到 Doris 服务器上,加载进去我理解就好了。
好的 下次注意补充这个信息。
社区其实很难搞定你这个问题。推荐你去 tikv 上提 issue。rawkv 的问题我们技术支持力度不大的。
用的是原生 tidb 集群,使用 sql 防晒提交的么?
还是用的裸 KV?
你这个截图太大了。看不清。
changefeed checkpoint lag 和 changefeed resolved lag:
如果都大,说明瓶颈在上游
如果前者很小,后者很大说明瓶颈在下游。
那是挺奇怪的,你可以先看下:
[image]
这里监控两个指标当时什么情况?
你发下 当时是不是在订阅,理论上 unresolved region 变为 0 才开始同步的。
你延迟加大是有在同步但是同步不过来还是没有同步数据呢。
cdc 任务新建的时候,需要订阅 region,你大概等了多久?
看下 ticdc 监控,unresolved region 数量当时有降到 0 么?