DM安全模式的insert语句疑问

【 TiDB 使用环境】测试
【 TiDB 版本】v6.5.0
【复现路径】无

为了尽量确保仅一次语义,DM重启/安全模式下会将insert转换为replace,这样相当于执行delete+insert语句;
这里应该就是防止重复插入吧,如果使用INSERT IGNORE INTO ...语法是不是也能实现这个问题而且提高效率呢?求同志解答一下

单纯从语义来讲,replace into 能保证最后一次更新插入数据库,insert ignore into 是首次插入,如果有二次变更可能不行,还有就是 ignore 忽略的是所有错误,不保证会不会有其他错误被忽略掉,比如数据长度有问题?TiDB 与其他数据库的数据库可能存在的兼容问题?这种错误忽略了可能是有问题的

1 Like

从正常数据来说insert肯定只需要执行一次,重启后消费一部分binlig,insert ignore和repalce其实作用一样啊,其他错误的问题先不考虑的情况下

replace into 要删除原来数据,然后插入;
insert ignore into 忽略插入数据,感觉这种消耗小

暂时关闭 未解决

@lance6716 大佬之前用 tla 做了一个相关的验证 https://github.com/lance6716/DM-safe-mode-model ,是可以改成 insert ignore 的,但是一直都还没改到 repo 里面,大佬有空的话可以试试 contribute 一下 :smile: