insert进行第一次乐观插入逻辑分析
发表于:2024-09-23 作者:千家信息网编辑
千家信息网最后更新 2024年09月23日,本篇内容主要讲解"insert进行第一次乐观插入逻辑分析",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"insert进行第一次乐观插入逻辑分析"吧!可能会触
千家信息网最后更新 2024年09月23日insert进行第一次乐观插入逻辑分析
本篇内容主要讲解"insert进行第一次乐观插入逻辑分析",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"insert进行第一次乐观插入逻辑分析"吧!
可能会触发锁继承
唯一检查会可能触发LOCK_S也是这里进入的
插入之前要定位数据
undo在redo生成之前生成
逻辑入口如下:
->row_ins_sec_index_entry_low 第一次进行乐观插入 mode=BTR_MODIFY_LEAF -> 是否是唯一键 是 row_ins_scan_sec_index_for_duplicate 进行唯一性检查 -> 进行唯一性检测结果处理 -> 进行数据查找 btr_cur_search_to_nth_level ->page_cur_search_with_match_bytes -> 如果只是检查重复值跳过下面逻辑 if (dup_chk_only) -> 进行乐观插入,假设不修改B+树结构 btr_cur_optimistic_insert,主要通过BTR_MODIFY_LEAF标示识别,此处不考虑压缩页 ->计算转换逻辑记录(元组)为物理记录后的长度 rec_get_converted_size ->rec_get_converted_size_comp ->是否需要外部存储page_zip_rec_needs_ext ->获取块的空闲空间大小 page_get_max_insert_size_after_reorganize 备注(1 ->进行是否需要悲观插入的逻辑判断,主要还是空间不够的情况 备注(2,如果需要悲观插入则这里返回了 ->如果是主键还需要预留部分空间 备注(3,如果没有预留空间也会进入悲观插入流程 ->判断是否需要加锁和开undo btr_cur_ins_lock_and_undo,此函数还会返回是否需要做锁继承的处理为输出参数inherit ->检查是否需要加锁lock_rec_insert_check_and_lock 插入印象锁就在这里 ->记录undo trx_undo_report_row_operation ->更改row undo ptr指针row_upd_index_entry_sys_field ->做实际插入操作 page_cur_tuple_insert ->逻辑记录转换为物理记录 rec_convert_dtuple_to_rec ->获取每个字段的偏移量 rec_get_offsets ->进行实际插入 page_cur_insert_rec_low ->获取记录的实际大小 ->寻找合适的位置进行插入,本步骤会找到合适的位置返回给insert_buf ->获取free链表的头部记录,注意只会检查第一个记录,不会做遍历,因此块中碎片是极有可能出现的 只是innodb可以重组 ->如果合适则使用 ->不合适则返回 ->进行记录创建拷贝 memcpy方式复制数据到insert_buf指向的位置,完成这一步记录加入到了块中 下面需要维护各种块信息 ->将记录加入到记录链表 ->更新行的N_OWNER为0,以及设置heap_no ->设置块的一些最后修改属性如PAGE_DIRECTION、PAGE_N_DIRECTION、PAGE_LAST_INSERT ->更新slot的信息,可能涉及更改owner记录信息和owner记录的N_OWNER信息 ->写redo信息 page_cur_insert_rec_write_log ->返回插入记录的offset ->进行AHI维护 btr_search_update_hash_on_insert/btr_search_update_hash_node_on_insert ->进行可能的锁的分裂 lock_update_insert 此处主要的判断是前面的输出参数inherit ->进行CHANGE BUFFER维护 ibuf_update_free_bits_if_full -> 如果成功修改最大事物ID PAGE_MAX_TRX_ID page_update_max_trx_id -> 返回结果
备注1) 计算方式为
空页的容量 = 页大小(比如16K) - 页头大小(120) - 页尾大小(8) - 初始化2个槽大小(4=2*2)
实际的数据占用空间 = 已经分配数据空间的最大数据偏移量 - 页头大小(120) - 已经删除且purge的空间包含碎片空间 + 槽大小
然后用
空页的容量 - 实际的数据占用空间=实际可用空间
因为页中难免会出现一些碎片,但是innodb的page拥有重新组织的能力,能够释放这部分空间。其重组函数为btr_page_reorganize_low
备注2) 逻辑包含
如果包含碎片空间那么
-- 如果可用空间不足或者可用空间已经少于了重组块的设置BTR_CUR_PAGE_REORGANIZE_LIMIT(UNIV_PAGE_SIZE / 32)
-- 记录数量大于1
-- 可用空间小于了插入记录的大小
否则
-- 可用空间小于了插入记录的大小备注3) 逻辑包含
--叶子结点
-- 主键
-- 记录大于两行
-- 剩余的空间 - 行的空间 < page_size/16
-- 分裂建议建议分裂
到此,相信大家对"insert进行第一次乐观插入逻辑分析"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
空间
逻辑
大小
实际
数据
备注
乐观
信息
检查
第一次
合适
碎片
分析
悲观
位置
重组
最大
内容
函数
参数
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
二级数据库教程
绝地求生轻量版服务器繁忙咋办
网络安全小视频3分钟
科技接棒互联网站
北京第三方软件开发怎么样
网络技术问卷调查
现数据库模型包括
服务器可以改装主机可以家用吗
安卓软件开发报价表
重庆电信软件开发工资待遇
南京文昊澎渤网络技术有限公司
九龙谷服务器我的世界
ip网络技术考试试卷
国外服务器在线看你懂的
台湾法国服务器
怎么降低宽带服务器延迟
天使之战服务器互通吗
南京java软件开发平台
哪些软件无法用代理服务器
软件开发如何计算费用
代理服务器 host
太湖网络安全怎么做
数据库查找成绩最高分前五名
宁波江东区财务软件开发价格
机顶盒桌面软件开发
做网络安全的维护者PPT
小企业 服务器
一台电脑同时安装2个数据库
网络安全内控
网络安全主题班会内容大学生