InnoDB
文章平均质量分 76
菜鸟翻身做主人
任重道远
展开
-
学习小记 -- MVCC之版本链和ReadView
版本链 在InnoDB中,一张表必须包含两个字段,trx_id和roll_pointer。 trx_id : 事务字段,当一个事务去操作某个行的数据时,会将自己的事务Id赋值给trx_id字段 roll_pointer : 回滚指针,当一个事务更新了一个字段的时候,并不会直接删除掉之前的字段,而是将该指针指向之前的字段存储到undo blog ReadView MVCC是由版本链和ReadView控制的, 我们可以将Read View看作一个数组,整个数组的左边界和右边界时当前活跃事务的事原创 2021-08-29 18:19:49 · 562 阅读 · 0 评论 -
学习小记 -- Mysql之死锁
通过死锁是指两个或两个以上的事务在执行过程中,因争夺资源而造成的一种互相等待的现象。 这里其实大家都可以想到一个解决方式,就是超时回滚:将任何的等待都转化为回滚,并且事务重新开始。的确这是一个解决办法,但是在生产环境中,这可能导致性能的下降,所带来的问题可能比死锁问题更严重,而且很难被发现并且浪费资源。 InnoDB存储引擎中,参数innodb_lock_wait_timeout用来设置超时时间。若其仅通过超时后对事务进行回滚或者通过FIFIO的顺序选择回滚对象,若超时的事务所占的权重比较大,比如事务操原创 2021-06-27 16:28:09 · 135 阅读 · 0 评论 -
学习小记 -- Mysql中的锁(间隙锁、Next-Key Lock)
InnoDB存储引擎有3种行锁算法: Record Lock:单个行记录上的锁。 Gap Lock:间隙锁,锁定一个范围,但不包括记录本身。 Next-Key Lock:Gap Lock+Record Lock,锁定一个返回,并且锁定记录本身。 如果InnoDB在表建立的时候没有设置任何一个索引,那么这是InnoDB存储引擎会使用隐式的主键来进行锁定。 在Next-Key Lock算法下,InnoDB对于行的查询都是采用这种算法,例如一个索引有3,10,15,26四个值,那么该索引可能被Next-K原创 2021-06-24 19:30:41 · 449 阅读 · 0 评论 -
学习小记 -- Mysql中的锁
锁是数据库区别与文件系统的一个关键特性。 数据库使用锁是为了支持对共享资源进行并发访问,提供数据的完整性和一致性。 对于MyISAM引擎,其锁是表锁设计。 InnoDB存储引擎锁的实现和Oracle数据库非常类似,提供一致性的非锁定读、行级锁支持。行级锁没有相关额外的开销,并可以同时得到并发性和一致性。 lock和latch lock和latch是两个比较容易混淆的概念,在数据库中两者都可以称为“锁”,但两者的含义截然不同。 latch一般被称为闩锁(轻量级锁),因为其要求锁定的时间必须非常短,原创 2021-06-23 23:17:48 · 146 阅读 · 0 评论