函数 btr_cur_optimistic_insert 实现了在 B+ 树中进行乐观插入的操作。它的参数包括:

  • flags:undo logging 和 locking 的标志位。如果不为零,则需要指定参数 index 和 thr。
  • cursor:指向将要插入记录的位置的游标,插入后游标仍然有效。
  • entry:要插入的记录。
  • rec:插入后记录的指针。
  • big_rec:如果记录过大,则返回指向将字段存储在外部的 big_rec_t 向量的指针。否则为 NULL。
  • n_ext:存储在外部的字段数量。
  • thr:查询线程或 NULL。
  • mtr:mini-transaction。

首先,函数获取 block 和 page,并检查 entry 是否符合要求。如果记录过大,则返回 DB_TOO_BIG_RECORD。

接着,函数计算了记录在转换为 rec 后的大小。如果这个大小超过了当前页的最大插入大小,则需要分裂页以获得足够的空间。

如果记录的大小超过了当前页的最大插入大小,则需要重新组织页。如果当前页是压缩页,则还需要检查是否有足够的空间来插入新记录。

接下来,函数检查锁和 undo log,并尝试插入记录。如果插入失败,则需要重新组织页。如果插入成功,则更新游标和插入缓冲区的位图。

最后,函数返回 DB_SUCCESS 和指向 big_rec_t 向量的指针(如果记录过大)

UNIV_INTERNulintbtr_cur_optimistic_insert======================	ulint		flags	! in undo logging and locking flags if not				zero the parameters index and thr should be				specified 	btr_cur_t	cursor	!

原文地址: http://www.cveoy.top/t/topic/eF39 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录