前言
上一篇文章《AliSQL 向量技术解析(一)》介绍了向量索引的存储格式、HNSW 算法实现以及数据字典适配方案,帮助读者了解向量索引的核心实现。
本文基于 AliSQL 8.0 20251031 版本,介绍一系列优化策略:引入内存驻留的 Nodes Cache 加速向量搜索效率,并基于该缓存结构实现读写并发控制与读已提交(RC)级别事务隔离,保障向量操作的可靠性与性能,使向量能力满足生产级要求。
节点缓存 Nodes Cache
AliSQL 引入了向量数据的公共缓存(MHNSW Share)和事务缓存(MHNSW Trx),用于加速向量查询性能并保证向量更新的事务安全,实现资源隔离与性能优化的平衡。

公共缓存和事务缓存供不同的操作访问,有不同的设计目标:
- 【公共缓存】MHNSW Share 供只读事务访问,挂载于辅助表的 TABLE_SHARE 上。其核心目标是通过共享缓存减少重复加载向量节点的开销,提升查询效率。
- 【事务缓存】MHNSW Trx 继承自 MHNSW Share,供读写事务使用,挂载于会话的 thd_set_ha_data。每个读写事务创建独立的 MHNSW Trx 实例,缓存其访问的节点包括其修改的节点,避免对公共缓存造成污染,仅在提交时去更新公共缓存。
事务隔离
AliSQL 目前支持向量读写的 RC(读已提交)隔离级别。通过区分读写事务和只读事务的访问缓存及提交流程实现。
【只读事务】执行 HNSW 查询算法,优先访问公共缓存 MHNSW Share,只有当访问节点未在缓存内时,才从 InnoDB 引擎中加载符合 RC(读已提交)可见性的节点信息。当多个只读事务多次访问同一向量节点,只需要从 InnoDB 引擎加载一次节点信息,有效提高了向量的查询性能。
【读写事务】进行插入时会构造会话级别的事务缓存 MHNSW Trx,插入过程可分为三个阶段:
- 读操作:基于事务的可见性,从 InnoDB 加载需要的节点信息,在事务缓存中执行 HNSW 插入算法,确定新插入节点在各 layer 的邻居信息及其邻居的邻居信息;
- 写操作:将新插入节点和更新了邻居信息的节点保存至 InnoDB 引擎;
- 提交或回滚:
- 提交:更新公共缓存版本号,并淘汰本次写操作修改过的所有节点(即过期节点),后续只读事务访问这些节点时需重新从 InnoDB 加载最新信息;
- 回滚:直接丢弃事务缓存,依赖 InnoDB 引擎的回滚机制恢复数据。
并发控制
AliSQL 在缓存内和缓存之间设计了合理的锁机制,目前支持读读、读写之间并发,暂不支持同一张向量表的写写并发。该机制在多线程访问中维持缓存状态的原子性与可见性,保障高并发场景下的数据一致性。
读读并发
结合缓存互斥锁(cache_lock)和节点锁(lock_node)保障多个读请求之间的并发安全。只读请求访问一个节点时,首先根据节点 ID 在公共缓存(底层为 hash 表)中查找;hash 表读写由 cache_lock 保护。若节点不存在,则创建空节点加入缓存;获取空节点的线程需从 InnoDB 加载数据,此时由 lock_node 保证仅一个线程执行加载操作。

读写并发
使用提交读写锁(commit rwlock)实现读请求与写请求之间的并发安全。读请求全程持有提交读锁(commit rdlock);写请求在执行插入算法过程中仅操作事务缓存,直到提交阶段才申请公共缓存的提交写锁(commit wrlock),淘汰过期节点。该机制保障了读请求与写提交之间的读写并发安全。

向量计算优化
在向量数据库的高维数据检索场景中,向量距离的计算效率直接决定查询性能。AliSQL 通过预计算策略与 SIMD 指令集加速实现显著优化,兼顾计算效率与缓存一致性。
预计算策略
在节点缓存加载阶段,系统预先计算向量距离并缓存结果,避免对高频访问节点的重复计算。例如,对频繁参与查询的节点,通过 FVectorNode 结构中的 version 字段进行版本控制:节点未变更则复用预计算结果;数据更新导致版本变更则触发重算。该机制将高频节点查询延迟降低超 40%。
SIMD 指令集加速
AliSQL 利用现代 CPU 的 SIMD 指令集(如 AVX512)加速向量距离计算。通过布隆过滤器批量处理多个向量,将标量运算转化为并行向量操作,显著减少 CPU 指令周期消耗。
实测表明:单个节点向量距离计算性能提升超 75%;在 1000 万级向量数据集中,SIMD 优化使查询吞吐量提升 3 倍以上。预计算与 SIMD 加速形成互补:前者降低高频查询延迟,后者优化单次计算效率,共同提升向量操作整体性能。
总结
通过公共缓存与事务缓存协同设计,AliSQL 实现了向量索引的高效缓存与事务隔离,保障高并发场景下的数据一致性与查询性能。当前支持向量数据的读读并发、读写并发,覆盖主流向量操作场景;锁策略确保并发安全。叠加预计算策略与 SIMD 加速,进一步提升了向量计算并发度与执行速度。

