随笔分类 -  《innodb存储引擎》学习笔记

摘要:acid 隔离级别 事务系统段(物理):事务、回滚段段头、mysql二进制位置(启动二进制文件时,数据库与存储引擎一致性)、双写段,四者信息 内存 事务系统对象 trx_sys_struct:{ 双写对象 段头 活跃事务链表(有序) 内部事务链表 回滚段对象数组 回滚段内存对象链表 最近使用回滚段 阅读全文
posted @ 2021-01-30 16:00 qmchao 阅读(77) 评论(0) 推荐(0)
摘要:b+树优点索引高度小(高扇出) 定位过程:定位页,载入缓冲池,有序slot(稀疏)定位记录,扫描 聚集索引:叶节点包含记录/下一层节点页地址 辅助索引:叶节点为引用:主键值 索引树内存对象:整棵树的读写锁 查找:先对内存对象加s-latch,进行页操作,若非叶节点不会发生变化,释放(乐观)。否则释放 阅读全文
posted @ 2021-01-19 20:24 qmchao 阅读(42) 评论(0) 推荐(0)
摘要:可重复读+nextkey lock 避免幻读 谓词锁:锁条件 范围锁:锁定记录时锁定范围 行锁:sx 记录||间歇||+ 多粒度锁定:意向锁ISIX(表级别) 锁根据页进行管理,页中记录有锁:位图 事务:记录每个页中持有的锁(link)(等待的锁) 全局哈希表(页-bitmap):记录事务中的行的锁 阅读全文
posted @ 2021-01-13 18:27 qmchao 阅读(104) 评论(0) 推荐(0)
摘要:b+树索引:磁盘,扇出率高,并发控制,分裂方向 聚集索引:非叶子节点存放<key,addr>指向下一层的指针(页地址:页在表空间偏移量);叶子节点存放完整记录 辅助索引:保存记录的地址——主键值(再进行一次索引定位) 引擎对每个索引产生内存对象,管理索引读写锁(区别于叶子节点的页读写锁) 分配记录空 阅读全文
posted @ 2021-01-12 16:04 qmchao 阅读(55) 评论(0) 推荐(0)
摘要:聚集索引页:叶子节点存放记录 辅助索引页:书签 物理页:block,磁盘 逻辑页:page,内存 页:索引页,undo日志页 页中信息: 可用空闲空间 索引id 修改当前页的事务id(仅在辅助索引中使用) 引擎为获得更好的顺序存储性,将叶子节点数据与非叶子节点存放于不同的段对象 页间移动数据(分裂合 阅读全文
posted @ 2021-01-12 14:03 qmchao 阅读(65) 评论(0) 推荐(0)
摘要:物理记录:磁盘 逻辑记录:内存 索引组织表:叶子节点存放记录,隐藏列:主键(未定义时)、事务ID(与隔离级别决定可见性)、回滚指针(指向undo日志) 记录包含在页中序号(heap no),记录间逻辑串联 伪记录:逻辑边界 定位:B+树定位到页,根据cell二分搜索 阅读全文
posted @ 2021-01-12 13:43 qmchao 阅读(44) 评论(0) 推荐(0)
摘要:物理磁盘:扇区 文件系统:块 存储引擎:页(管理)区(申请)表空间(逻辑) 页:包含表空间偏移量,连接页与页。完整性检查(首尾lsn相等) 段:保存对象(表),用户表至少两个段:叶子节点段(聚集索引),非叶子节点段 小对象:(小表,undo段)首先从碎片页分配,超出后以区分配 段管理页(从表空间获取 阅读全文
posted @ 2021-01-12 13:25 qmchao 阅读(60) 评论(0) 推荐(0)
摘要:内存管理系统(内存池,非缓冲池中的页管理) 内存堆:批量获取内存(减少系统调用开销(malloc动态分配),亦可从缓冲池中分配),并进行细粒度管理 增长空间:增加内存块(栈结构决定释放顺序) 内存块校验:起始域结尾域随机数 内存池:小块内存管理(分配的内存单位:内存区),伙伴系统(倍增内存,链表维护 阅读全文
posted @ 2021-01-12 13:00 qmchao 阅读(43) 评论(0) 推荐(0)
摘要:chapter3 自旋锁:内存屏障保证加锁解锁顺序 mutex:测试——自旋(命中cpu cache1减少内存访问,且减少上下文切换)——等待队列等待唤醒 读写锁:读锁不可重复获取,写锁可以(维护锁-线程关系) chapter4 物理日志:恢复快 逻辑日志:开销小 重做日志:物理逻辑日志 二进制日志 阅读全文
posted @ 2020-12-22 13:49 qmchao 阅读(75) 评论(0) 推荐(0)