随笔分类 - MySQL Innodb Engine
摘要:MVCC实现 在InnoDB存储引擎中,每个表都是索引组织表,如果建表时没有指定主键索引,会自动创建一个6字节的自增列来作为隐藏主键。 每条聚簇索引的索引记录都包含下面两个隐藏列: 事务ID列,用于标识该版本记录由那个事务修改产生。 回滚指针列,用于指向“存放上一个版本记录数据”的Undo Log指
阅读全文
摘要:问题总结 问题:DML操作时先生成Undo Log是Redo Log? 答案:先生成Undo Log,再生成Redo Log。 在生成Undo Log并写入到Undo Space时,会产生Redo Log。 在故障恢复时,可以通过Redo Log来恢复Undo Log,再通过Undo Log来回滚事
阅读全文
摘要:功能特性 在MySQL中,对哈希索引的访问仅需要一次HASH计算即可定位到目标位置,而对B树索引的访问需要依次访问根节点>中间节点>叶子节点。 为优化B树索引需要访问多个"非叶子节点页"才能定位到"叶子节点页"的问题,InnoDB存储引擎通过哈希索引来帮助查询快速找到"目标叶子节点页"以提高查询性能
阅读全文
摘要:自适应哈希索引KEY和VALUE 在MySQL中,对于不同对象,哈希索引键值的计算各不相同,基本思路都是对查询的键进行fold,然后通过hash_calc_hash来计算对应所处哈希表中哈希槽(cell)。 对于自适应哈希索引,KEY对应的是逻辑记录经过fold后的值,VALUE对应的是记录所在的页
阅读全文
摘要:自适应哈希索引数据结构 对B+树的数据查找,需要遍历从根节点到叶子节点之间的每一层的节点,因此B+树的树高过高时,会影响B+树的查找效率。 Innodb存储引擎根据查询模式,对活跃的数据页中的记录进行哈希索引,以实现快速查找,解决B+树树高问题。 为标识查询模式和热点页,需要在索引和数据页上有相应的
阅读全文
摘要:1、自适应哈希索引初始化 在storage\innobase\buf\buf0buf.cc的函数buf_pool_init负责初始化Buffer pool, 会调用btr_search_sys_create来初始化AHI,并分配当前Buffer pool内存的1/64给AHI。 /** Create
阅读全文
摘要:问题描述 在做DML操作时,是先修改buffer pool数据,还是先记录redo log呢? 答案:先修改buffer pool数据,然后再记录redo log。 代码学习 在page0cur.cc文件有page_cur_insert_rec_low方法,该方法用于插入新记录,其方法中有如下注解:
阅读全文
摘要:测试表信息 1、测试表结构 CREATE TABLE `schedule` ( `id` int(11) NOT NULL AUTO_INCREMENT, `task_id` int(11) NOT NULL, `first_run_time` datetime NOT NULL, `end_run
阅读全文
摘要:MySQL InnoDB存储引擎使用MVCC机制来提供一致性非锁定读((consistent nonlocking read)。 为方便演示,下面图中: 黄色部分表示重做日志(UNDO LOG) 绿色部分表示正常数据 红色部分表示已删除数据 假设现在有表TB001,其表结构为: CREATE TAB
阅读全文
摘要:继续上一个测试 测试2:更新测试 测试脚本: ## 更新C1列并导致数据变化 UPDATE TB001 SET C1='BBBB01' WHERE ID='AA0001'; ## 更新C1列但不导致数据变化 UPDATE TB001 SET C1='BB0002' WHERE ID='AA0002'
阅读全文
摘要:测试环境: MySQL 5.7.28 社区版 CentOS release 6.10 MySQL Undo参数配置: innodb_undo_tablespaces = 1 innodb_default_row_format = dynamic 测试1:插入测试 测试脚本: ## 创建测试表 CRE
阅读全文
摘要:测试环境: MySQL 5.7.28 社区版 CentOS release 6.10 MySQL Undo参数配置: innodb_undo_tablespaces = 1innodb_default_row_format = dynamic 测试脚本: ## 创建测试表 CREATE TABLE
阅读全文
摘要:在MySQL 5.7版本中引入Online DDL特性和共享临时表空间特性,临时数据主要存放形式为: 1、DML命令执行过程中文件排序(file sore)操作生成的临时文件,存储目录由参数tmpdir控制,以MY开头2、超大事务提交生成binary log过程中用于数据缓存的临时文件,存储目录由参
阅读全文
摘要:InnoDB并发线程控制 MySQL InnoDB存储引擎提供innodb_thread_concurrency来控制进入InnoDB 存储引擎的线程数,以限制InnoDB存储引擎层的并发量。当innodb_thread_concurrency>0时,表示开启线程数检查机制,当有新的Mysql线程调
阅读全文
摘要:通常情况下,缓冲池无法将整个数据库所有数据都进行缓冲,而且不同数据的访问频率不一样,有些数据会被频繁访问,而有些数据可能数月不会被访问一次,因此数据库使用最近最少使用LRU latest Recent Used算法来管理缓冲池,其算法思想为:最近访问的数据被再次访问的概率要高于之前被访问的数据,被多
阅读全文
摘要:## ##在MySQL 5.7版本中引入将Innodb Buffer中数据备份和回复的新特性,具体原理时将Buffer pool中LRU链表上的存放的spaceid和page id存储到文件中,在数据库恢复时,按照该文件中存放的spaceid和page id数据对应的页面加载到buffer pool
阅读全文
摘要:MySQL中参数innodb_file_per_table决定将表存放于ibdata*的共享表空间还是独立的.ibd文件的独立表空间。 共享表空间方式:所有数据和索引都存放在共享表空间中,默认存放在MySQL的data目录下。 优点:可以为共享表空间配置多个数据文件,多个数据文件可以存放到不同磁盘上
阅读全文
摘要:在InnoDB 1.0.x版本之前,InnoDB 存储引擎提供了 Compact 和 Redundant 两种格式来存放行记录数据,Redundant格式是为兼容之前版本而保留的,而Compact行格式在MySQL 5.0中引入,在 MySQL 5.6 版本中,默认设置为 Compact 行格式。
阅读全文