Innodb
文章平均质量分 94
GDUT_Ember
这个作者很懒,什么都没留下…
展开
-
笔记:MVCC的理解
MVCC介绍UNDO LOGMVCC原理read-view版本链实现可重复读与读已提交的区别补充:Insert undo logMVCC介绍MVCC其实就是多版本并发控制,用来解决幻读问题,同时解决幻读问题还有间隙锁。UNDO LOGundo log是用来事务回滚的,具体细节回看undo log文章这里要注意的一点是,每条undo log就是一个表的版本undo log又分为两种Insert undo log:针对Insert操作的Update undo log:针对update和del.原创 2021-05-23 12:08:24 · 185 阅读 · 0 评论 -
InnoDB(7.3):事务——purge操作与group commit
Purgepurge实现清理undo页purge的相关参数group commit拓展:InnoDB1.2版本之前,group commit的不足BLGCBLGC的实现步骤前面提到过,事务的delte和update操作是不直接删除原有数据的,都是采用标记删除,即在undo log页标记为删除,但在实际的B+树索引还是有该记录的,真正删除这行记录的操作其实被时延了,最终是在Purge操作中完成的Purgepurge操作其实是为了支持MySQL的MVCC,所以记录不能在事务提交时就立即进行处理,因为可能.原创 2021-05-22 14:09:00 · 474 阅读 · 0 评论 -
InnoDB(7.2):事务——Undo log
Undo页undo存储管理undo log格式Insert undo logUpdate undo log更新主键不更新主键前面我们已经认识到了Redo页,也就是重做日志,是用来记录事务行为的,也就是实现持久性,那么隔离性、一致性又是怎么实现的呢?就需要用到下面的Undo页Undo页重做日志(Redo log)记录了事务的行为,可以很好地通过其对页进行重做操作,但是当事务需要回滚的时候,是需要旧时的数据而不是事务的行为,那么这时候就需要使用到Undo页。在对数据库修改的时候,InnoDB存储引擎不.原创 2021-05-22 10:37:13 · 238 阅读 · 0 评论 -
InnoDB(6.4):log group、重做日志格式、LSN与数据库恢复
log group重做日志格式LSN恢复前面已经学了了rodo log,可以知道redo log(即log block)的组成下面认识一下log group,log group其实为重做日志组,其中有多个重做日志,InnoDB默认只有一个log group。log grouplog group实则上是一个逻辑上的概念,并没有一个实际存储的物理文件来表示log group信息。log group由多个重做日志文件组成(其实也就是重做日志总文件),而每个log group中的日志文件大小是相同的,I.原创 2021-05-20 23:19:24 · 336 阅读 · 0 评论 -
InnoDB(7.1):事务的实现(一)——认识redo log、bin log
事务的实现redo logbin logbin log与redo log的区别log blocklog block headerlog block tailer事务的主要目的是:事务会把数据库从一种一致状态转化为另一种状态,在数据库提交工作时,确保修改要么都已经保存了,要么所有修改都不修改。InnoDB存储引擎的事务完全符合事务的4大特性ACIDA:atomicity——原子性C:consistency——一致性I:isolate——隔离性D:durability——持久型这4种特性和一.原创 2021-05-19 21:23:06 · 184 阅读 · 0 评论 -
InnoDB(6.3):锁——阻塞、死锁、锁升级
阻塞死锁解决死锁的方式等待图锁升级阻塞阻塞情况是因为不同锁之间的兼容性关系,事务的执行可能要需要等待锁的释放才可以继续进行下去,那么在这个时间段就称为阻塞。阻塞其实并不是一件坏事,因为阻塞是为了确保事务可以并发且正常地运行,保证数据的一致性。InnoDB使用innodb_lock_wait_timeout用来控制等待的时间(默认是50S),超过这个时间就不等待了,是要结束事务还是要回滚取决于innodb_rollback_on_timeout(默认为off),该用来设定是否在等待超时后,是否要对进.原创 2021-05-18 21:01:32 · 281 阅读 · 0 评论 -
InnoDB(6.2):锁的算法与锁问题(脏读、不可重复读、丢失更新、幻读)
锁的算法行锁的三种算法解决Phantom Problem锁问题脏读不可重复读丢失更新幻读锁的算法行锁的三种算法InnoDB存储引擎有3种行锁的算法,分别如下Record Lock:单个行记录的锁Gap Lock:间隙锁,锁定一个范围,但并不包含记录本身Next-Key Lock:Gap Lock + Record Lock,锁定一个范围,同时锁定记录本身前面学习的锁都是基于Record Lock进行的,也就是行锁Record Lock总是会去锁住索引记录,如果InnoDB存储引擎在建表.原创 2021-05-18 17:14:02 · 212 阅读 · 0 评论 -
InnoDB(6.2):锁的一致性读锁定读与非锁定读、自增长、外键与锁的关系
一致性非锁定读一致性锁定读自增长与锁当Innodb_autoinc_lock_mode为0时当Innodb_autoinc_lock_mode为1时当Innodb_autoinc_locak_mode为2时外键和锁前面已经了解了事务中的锁有哪些类型,下面来看看事务中具体是怎样操作的一致性非锁定读假设一个事务读取的行正在被执行更新操作,比如DELETE或者UPDATE,这时读取操作应该是要去等待行上锁的释放(前面提到过行的共享锁与排他锁是不兼容的,所以要等待释放),但实际上,读取操作并不会去等待,In.原创 2021-05-17 16:32:27 · 142 阅读 · 0 评论 -
InnoDB(6.1):InnoDB锁的类型与兼容性
锁的简介Lock与Latchlock与latch的区别InnoDB存储引擎中的锁锁的类型共享锁排它锁锁兼容与锁不兼容多粒度锁定关于行锁所在地方锁的简介锁机制是用来管理对共享资源的并发控制的(避免数据污染)InnoDB存储引擎会在行级别对表数据进行上锁,同时也会在其他地方进行上锁,例如缓冲池中的LRU列表,为了保证删除、添加、移动LRU列表里面的元素是一致性的,需要进行加锁。数据库系统使用锁是为了支持对共享资源进行并发访时,提供数据的完整性和一致性MyISAM引擎的锁是表锁,并发情况下的读是没有问.原创 2021-05-17 12:29:06 · 396 阅读 · 0 评论 -
InnoDB(5.4):哈希索引与全文检索
InnoDB存储引擎中的哈希算法哈希表底层数组大小mK的求法自适应的哈希索引自适应哈希索引的优点自适应哈希索引的缺点InnoDB的全文检索倒排索引全文检索FTS INDEX Cache全文检索的限制全文检索的方式Natural Language(默认模式)BooleanQuery ExpansionInnoDB存储引擎中的哈希算法哈希表的结构就不赘诉了InnoDB存储引擎使用哈希算法来对字典进行查找,其冲突机制采用链表法这里拓展一下,哈希冲突除了链表法外,还有开放寻址法。开放寻址法是针对发生哈希.原创 2021-05-15 20:47:08 · 276 阅读 · 1 评论 -
InnoDB(5.3):B+树索引的使用
联合索引覆盖索引优化器不使用索引的情况索引失效几种情况MRR优化MRR的工作方式ICP优化联合索引联合索引是指对表上多个列进行索引,联合索引的创建方法与单个索引创建创建的方法一样,不同之处仅在于索引列是多个CREATE TABLE t( a INT, b INT, PRIMARY KEY(a), KEY idx_a_b(a,b))ENGINE=INNODB;从本质上来说,联合索引也是一棵B+树,不同的是联合索引的键值的数量不是1,而是大于等于2前面说过,索引在B+树的排列是有序的,而.原创 2021-05-14 21:58:44 · 159 阅读 · 0 评论 -
InnoDB(5.2) Cardinality值
什么是Cardinality值InnoDB存储引擎对于Cardinality统计持久化策略非持久化策略采样计算持久化的采样计算非持久化的采样计算其他参数什么是Cardinality值官方解释首先,要知道的一点是,并不是在所有的查询条件中出现的列都需要添加索引值,对于什么时候添加B+树索引,一般的经验是,在访问表中很少一部分时的数据使用B+树索引才会有意义(也就是说,索引的列要有很高的筛选性,筛选出绝大部分的数据才是有效的,要有高选择性)举个栗子对于性别字段、地区字段、类型字段等可取值的范围很小.原创 2021-05-13 23:17:49 · 379 阅读 · 0 评论 -
InnoDB(5.1):索引与算法
InnoDB存储引擎索引概述数据结构与算法二分查找法B+树索引聚集索引辅助索引B+树索引的决裂+树索引的管理索引管理Fast Index CreationOnline DDLInnoDB存储引擎索引概述InnoDB存储引擎支持以下几种常见的索引B+树索引全文索引自适应哈希索引前面MySQL(八)提到过,InnoDB支持哈希索引(只不过使用哈希表去进行存储数据而已,不像B+树索引使用B+树去存储),不过是自适应的,也就是InnoDB存储引擎根据表的使用情况自动生成哈希索引,不能认为进行干预是.原创 2021-05-12 14:18:02 · 109 阅读 · 0 评论 -
InnoDB(4.4) 约束
数据完整性约束约束的创建和查找约束和索引的区别对错误数据的约束ENUM和SET约束触发器与约束外键约束CASCADESET NULLNO ACTIONRESTRICT(MySQL默认)Set default(MySQL自带的,但InnoDB不能识别)InnoDB在添加外键时做了什么?外键的优缺点数据完整性约束首先,我们先来认识一下什么是数据的完整性数据的完整性是指数据库中的数据值均是正确的状态,比如说唯一不重复型、不为NULL型。关系型数据库系统和文件系统的一个不同点是,关系型数据库本身就可以保证.原创 2021-05-10 22:58:33 · 169 阅读 · 0 评论 -
InnoDB(4.3) 数据页结构
数据页的组成File HeaderPage HeaderInfimum和Supremum RecordUser Record和Free SpacePage DirectoryFile TrailerB-tree Node其实就是数据页。数据页的组成InnoDB的数据页由7个部分组成File Header(文件头,固定38字节)Page Header(页头 固定56字节)Infimun和Supremum RecordsUser Records(行记录)Free Space(空闲空间)Pa.原创 2021-04-30 09:47:36 · 210 阅读 · 0 评论 -
InnoDB(4.2) 行记录格式
行记录格式Compact行记录格式变长字段长度列表NULL标志位记录头信息存储列的部分实战看一下里面Compact记录Redundant行记录字段长度偏移列表存储列的部分对NULL值的处理行溢出数据Compressed和Dynamic行记录模式Dynamic、Compressed记录行的格式CHAR的行结构存储行记录格式现在的MySQL支持4种行记录格式RedundantCompactDynamicCompressedCompact行记录格式Compact行记录可以高效地存储数据,即一.原创 2021-04-23 17:40:47 · 279 阅读 · 0 评论 -
InnoDB(4.1):InnoDB的逻辑存储结构简介(表、段、区、页、行)
表索引组织表InnoDB逻辑存储结构表空间段区页行表表就是关于特定实体的数据集合,是关系型数据库的核心索引组织表在InnoDB存储引擎中,表中的数据都是根据主键顺序组织存放的,这种存储方式的表称为索引组织表所以在InnoDB存储的引擎表中,都必须有个主键(primary key),如果在创建表时没有显示地定义主键,则InnoDB存储引擎会按照下面的方式选择或者创建主键首先判断表中是否有非空的唯一索引,即unique key not null,如果有,那么该列就会变为主键(rowid)如果有.原创 2021-04-21 22:36:11 · 1134 阅读 · 0 评论 -
InnoDB(3.2):InnoDB存储引擎文件
表空间文件重做日志文件重做日志的大小设置重做日志与二进制日志的区别重做日志的条目结构重做日志写入的大小重做日志刷新的条件表空间文件InnoDB采用将存储的数据按表空间(tablesapce)进行存放的设计,在默认配置下会有一个初始大小为10MB,名为ibdata1的文件,该文件就是默认的表空间文件(tablespace file),用户可以通过参数innodb_data_file_path对其进行设置如果设计了innodb_data_file_path参数,所有基于InnoDB存储引擎的表的数据都会.原创 2021-04-20 22:50:14 · 237 阅读 · 0 评论 -
InnoDB(2.5) 关键特性:两次写、自适应哈希索引、异步IO与刷新邻接页
doubleWrite:两次写部分写失效(partial page write)DoubleWrite执行自适应哈希索引哈希索引的要求异步IO异步IO的优点刷新邻接页Insert Buffer带给InnoDB存储引擎的是性能上的提升,那么两次写(Double Write)带给InnoDB存储引擎的是数据页的可靠性。doubleWrite:两次写部分写失效(partial page write)部分写失效是指当刷新页时,只有部分成功刷新进页中,其余部分都写入失败(比如宕机引起)。这种情况可以根据重.原创 2021-04-16 15:40:31 · 143 阅读 · 0 评论 -
InnoDB(2.4) 关键特性:Insert Buffer
Insert Buffer插入缓冲聚集索引Insert BufferChange BufferInsert Buffer的内部实现metadata字段Insert Buffer BitmapMerge Insert BufferInsert BufferInnoDB的关键特性包括下面几个插入缓冲(Insert Buffer)两次写(Double write)自适应哈希索引(Adaptive Hash Index)异步IO(Async IO)刷新邻接页(Flush Neighbor Page.原创 2021-04-16 15:38:56 · 259 阅读 · 0 评论 -
InnoDB(2.3):Master Thread
Master Thread工作方式InnoDB 1.0.x版本之前的工作方式Loop循环每一秒的操作每十秒的操作background loopInnoDB 1.2.x版本之前的Master ThreadInnoDB 1.2.x版本的Master ThreadMaster Thread工作方式InnoDB的主要工作都是在一个单独的后台线程Master Thread中完成的。InnoDB 1.0.x版本之前的工作方式**Master Thread具有最高的线程优先级别,内部是由多个循环(loop)组成.原创 2021-04-14 15:40:23 · 186 阅读 · 0 评论 -
InnoDB(2.2):体系架构之Checkpoint技术
前一面一篇粗略了解InnoDB体系架构里面的缓冲池,下面详细认识以下缓冲池里面的技术和线程执行过程。 Checkpoint技术Write Ahead log策略Sharop CheckpointFuzzy CheckpointMaster Thread CheckPointFlush_LRU_LIST_CheckpointAsync/Sync Flush CheckpointDirty Page too muchCheckpoint技术缓冲池的目的是减少数据库访问磁盘的次数,提高效率的,页的操作一般都原创 2021-04-12 18:16:34 · 220 阅读 · 0 评论 -
InnoDB(2.1):体系架构
InnoDB存储引擎InnoDB存储引擎的版本InnoDB各版本功能对比版本功能老版本InnoDB支持ACID(事务)、行锁设计、MVCCInnoDB 1.0.X继承了上述版本所有功能,增加了compress和dynamic页格式InnoDB 1.1.X继承了上述版本所有功能,增加了Linux AIO、多回滚段InnoDB 1.2.X继承了上述版本所有功能,增加了全文索引支持,在线索引添加下面说说InnoDB 1.0.X和InnoDB 1.1.X的不原创 2021-04-11 23:10:05 · 150 阅读 · 2 评论