聊聊数据库中的 savepoint
💡
原文中文,约2800字,阅读约需7分钟。
📝
内容提要
构建全局二级索引时,开启分布式事务并并行插入数据以保证一致性。使用savepoint回滚插入失败的数据,而不是整个事务。PolarDB-X通过设置auto-savepoint实现回滚单条逻辑SQL的功能。通过减少设置savepoint的次数和使用私有协议来减轻代价。
🎯
关键要点
-
构建全局二级索引时,需要开启分布式事务以保证主表和索引表数据的一致性。
-
插入失败时,可以使用savepoint回滚单条数据,而不是整个事务。
-
PolarDB-X通过设置auto-savepoint实现回滚单条逻辑SQL的功能。
-
savepoint在事务中用于记录特定状态,以便后续回滚。
-
MySQL通过维护savepoint链表来实现savepoint功能。
-
在PolarDB-X中,物理连接执行前设置savepoint,执行后根据情况回滚或释放。
-
设置和释放savepoint的代价较低,但应尽量减少设置次数。
-
只有在涉及GSI或逻辑执行的DML时,才自动设置savepoint以保证原子性。
-
通过多语句方式下发savepoint SQL和业务物理SQL,避免增加额外的RTT。
-
使用私有协议绕过savepoint SQL的解析过程,直接在DN上调用设置和释放savepoint的代码。
➡️