OceanBase VSAG 向量索引导致 MyBatis 批量插入
1536维的向量数据在 OceanBase 4.3.3 (MySQL 模式) 里一旦开了 VSAG 索引,写入性能简直断崖式下跌。
下一篇
我的竞品监控自动化踩坑记录:从Cron Job到MCP →
最近在做向量数据迁移,用 Spring Boot + MyBatis-Plus 的 saveBatch 跑数据,每批 200 条。结果只要表上挂了 VSAG 索引,就频繁报这个错:
JDBC SQLState: XA102, Error Code: 4012 - Transaction timeout or statement timeout exceeded最诡异的是,如果把这个向量索引删掉,同样 5 万条数据几秒钟就刷完了,完全没压力。说明问题不在于数据量,而是在于索引维护。
为了解决这个问题,我尝试在 Session 级别把 ob_query_timeout 和 ob_trx_timeout 全调到了 120 秒以上,但依然没能根治,还是会触发超时崩溃。
目前的排查结论:
VSAG 这种基于图的索引在批量插入时,同步维护索引的开销极大。每批次写入时,索引构建可能长时间占用事务锁,导致后续批次被阻塞,最终撑爆超时阈值。
现在比较纠结的点:
OceanBase 是否支持将 VSAG 索引的维护改为异步(类似延迟构建或后台构建)?如果能像某些数据库那样先入库、后异步建索引,这种高吞吐的向量导入实战场景才跑得通。
有没有研究过 OceanBase 向量索引调优的大佬,分享一下针对 vector_data 这种高维字段的批量写入优化方案?