Skip to content

P0性能优化:异步日志刷盘组提交 + B+树Latch Crabbing并发优化

某某某 requested to merge hqj_branch into main

P0-1 异步日志刷盘 + 组提交:

  • LogManager 改为双缓冲 + 后台刷盘线程架构
  • 新增 flush_thread_loop() 后台周期性刷盘(50ms)
  • add_log_to_buffer() 缓冲区满时自动交换,非阻塞
  • flush_log_to_disk(target_lsn) 支持组提交,多事务共享fsync
  • TransactionManager::commit/abort 改用组提交API
  • LogBuffer 增加 max_lsn_ 跟踪,支持精确的刷盘完成判断

P0-2 B+树 Latch Crabbing 并发优化:

  • Page 类新增 RLock/RUnlock/WLock/WUnlock 读写锁接口
  • root_latch_ 改为 std::shared_mutex,支持并发读
  • find_leaf_page 重写为 Latch Crabbing 协议(读锁遍历)
  • 新增 is_safe() 判断节点是否会发生分裂/合并
  • insert_entry 乐观锁路径:读锁遍历+写锁升级,不安全回退悲观路径
  • delete_entry 悲观策略(合并逻辑复杂,串行化保证正确性)
  • 修复 get_value/lower_bound/upper_bound 的读锁释放

验证:5/5单元测试通过;8线程并发插入1600条无丢失;崩溃恢复完整

Merge request reports