行级锁、表级锁、MySQL中的页级锁
在数据库管理系统中,数据库锁可以分为行级锁(InnoDB引擎),表级锁(MyISAM引擎),页级锁(BDB引擎)根据锁的粒度。
一、行级锁
行级锁是在MySQL最好的锁,表明线路锁定只对当前操作的行。行级锁可以大大减少数据库操作的冲突,锁的粒度是最小的,但锁定成本也最大。行级锁分为共享锁和排它锁。
特征
高开销、慢锁、死锁、最小锁粒度、锁冲突的最低概率和最高并发性。
二、表类锁
表锁是MySQL中最大的锁定粒子。这意味着当前操作的整个操作被锁定。它实现简单,占用资源少。它是由大多数MySQL引擎支持。最常用的MyISAM和InnoDB支持表级锁,表级锁定分表共享读锁(共享锁)和表的排他锁(互斥锁)。
特征
低开销、快速锁定、无死锁、大锁粒度、锁定锁的最高概率和最低并发性。
三页级锁
表级锁是MySQL中行和表锁之间的锁定粒度中间的锁。表级锁是很快的,但是冲突多,水平线的冲突较少,但速度慢。这样一种妥协页面级带,和一组相邻的记录被锁定在一个time.bdb支持页级锁
特征
开销和锁定时间在表锁和行锁之间;死锁发生;锁粒度在表锁和行锁之间是有限的,并发是常见的。
MySQL通用存储引擎锁机制
MyISAM和内存使用表级锁(表级锁)
BDB使用页锁(页级锁定)或表级锁,默认页锁
InnoDB支持行级锁(行级锁)和表级锁,默认是行级锁
四行锁和表锁,InnoDB
如前所述,两行和表锁在InnoDB引擎的支持,所以当将整个表锁,当或只有一行被锁定
InnoDB锁是通过指数佳所指数来做到这一点,MySQL和Oracle,后者是通过在数据块对应的锁行achieve.innodb这行锁实现特征意味着可以使用一行只有通过索引条件检索数据,否则,InnoDB将使用一个表锁锁!
在实际应用中,应特别注意这一特点,InnoDB行锁,否则,它可能会导致大量的锁冲突,这会影响并发性能。
行级锁是索引的,如果SQL语句不使用行级锁而不用索引,则使用表级锁。行级锁的缺点是需要大量锁资源,所以速度慢,内存消耗。
五、行级锁和死锁
MyISAM没有死锁,因为MyISAM总是全部锁在一个所需要的时间,要么完全满意,或者都在等待,在InnoDB,锁逐步收购,导致死锁的可能性。
在MySQL中,行级锁不是直接锁定,但锁定指标。指标分为主键索引和非关键指标,如果一个主键的索引操作的SQL语句,MySQL将锁的关键指标;如果一个表的主键索引非手术首先,MySQL会锁定非主键索引,然后锁定的关键指标。当更新和删除操作,MySQL不仅锁都记录在索引扫描,而且锁相邻关键值,所谓的下一个关键的锁。
当两个事务同时执行时,一个锁在等待其他相关索引时逐渐索引,一个锁定非键索引,并等待主索引索引。这将导致死锁。
总的来说,InnoDB后才能检测到对生命和死亡的锁和事务释放锁回来了,和其他的锁来完成交易。
有许多避免死锁的方法。这里只有三种常见类型,如下所示
1,如果不同的程序可以同时访问多个表,尽可能一致地以相同的顺序访问表,则可以大大减少死锁的机会。
2。在同一事务中,尽可能多地锁定一次所需的资源,以减少死锁生成的概率。
三.对于很容易产生死锁的业务部分,您可以尝试使用递增锁定粒度,通过使用表级锁定来减少死锁发生的概率。
以上是本文的全部内容,希望能对大家有所帮助。