【易客吧】_全网激活码总代_激活码商城

您现在的位置是:首页 > 热门资讯 > 正文

热门资讯

MySQL 意向锁类型:不同粒度的锁定策略分析

用户投稿2024-04-17热门资讯24

概述

MySQL 中的意向锁是一种特殊的锁类型,用于指示事务打算对数据进行某种类型的更改。意向锁用于确保事务之间不会发生冲突,并提高并发性。MySQL 提供了两种类型的意向锁:共享意向锁 (IS):表示事务打算对数据进行读取操作。独占意向锁 (IX):表示事务打算对数据进行写入操作。

锁定的粒度

意向锁可以在表的不同粒度上获取:表级:意向锁应用于整个表,表示事务打算对表中的所有数据进行读取或写入。行级:意向锁应用于表中的特定行,表示事务打算对该行进行读取或写入。

锁定模式

当事务获取意向锁时,它会指定一个锁定模式,该模式指示事务打算如何使用数据:共享模式:事务可以读取数据,但不能写入或删除数据。独占模式:事务可以读取、写入或删除数据。

锁定兼容性

下表显示了不同锁定模式和意向锁类型的兼容性:| 锁定模式 | IS | IX | |---|---|---| | 共享 | 是 | 否 | | 独占 | 否 | 是 |这意味着事务可以同时获取多个共享意向锁,但不能同时获取共享意向锁和独占意向锁。

意向锁的优点

意向锁提供了以下优点:提高并发性:通过允许多个事务同时获取共享意向锁,意向锁提高了对数据的并发访问。防止死锁:意向锁通过确保事务在获取更严格的锁之前获取意向锁,从而防止死锁。减少锁争用:意向锁通过允许事务在获取行级锁之前获取表级意向锁,从而减少了锁争用。

意向锁的缺点

意向锁也有一些缺点:开销:获取和释放意向锁会产生开销,可能对性能造成影响。粒度:意向锁只能在表级或行级获取,这可能不足以防止所有类型的冲突。死锁:虽然意向锁可以防止大多数死锁,但它们仍然可能在某些情况下发生。

何时使用意向锁

意向锁最适合于以下场景:需要高并发性的应用程序需要防止死锁的应用程序在表级或行级上处理大量数据的应用程序

禁用意向锁

在某些情况下,可以禁用意向锁以提高性能。以下是在 `my.cnf` 中禁用意向锁的示例:[mysqld] innodb_locks_unsafe_for_binlog=1但是,禁用意向锁可能会增加死锁的风险。

结论

MySQL 中的意向锁是一种强大的工具,可以提高并发性、防止死锁并减少锁争用。通过理解意向锁的不同类型、粒度、锁定模式和兼容性,可以优化数据库应用程序的性能和可靠性。

意向锁的类型

如果对一个数据对象加 SIX锁,表示对它加 S锁,再加IX锁,即 SIX=S+IX。 例如对某个表加 SIX锁,则表示该事务要读整个表(所以要对该表加 S锁),同时会更新个别元组(所以要对该表加 IX锁)。 图8.9(a)给出了这些锁的相容矩阵,从中可以发现这5种锁的强度如图8.9(b)所示的偏序关系。 所谓锁的强度是指它对其他锁的排斥程度。 一个事务在申请封锁时以强锁代替弱锁是安全的,反之则不然。 具有意向锁的多粒度封锁方法中任意事务T要对一个数据对象加锁,必须先对它的上层结点加意向锁。 申请封锁时应该按自上而下的次序进行;释放封锁时则应该按自下而上的次序进行。 具有意向锁的多粒度封锁方法提高了系统的并发度,减少了加锁和解锁的开销,它己经在实际的数据库管理系统产品中得到广泛应用,例如新版的Oracle数据库系统就采用了这种封锁方法。

关于MySQL中的表锁和行锁

mysql行锁和表锁

锁是计算机协调多个进程或纯线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所在有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。

概述

相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。

MySQL大致可归纳为以下3种锁:

MySQL 意向锁类型:不同粒度的锁定策略分析 第1张

MySQL白菜教程(Level 10 - 意向锁&记录锁&间隙锁)

意向锁(Intention Locks; table-level lock) 意向锁是一种特殊的表级锁,意向锁是为了让 InnoDB 多粒度的锁能共存而设计的。取得行的共享锁和排他锁之前需要先取得表的意向共享锁(IS)和意向排他锁(IX),意向共享锁和意向排他锁都是系统自动添加和自动释放的,整个过程无需人工干预

意向锁就是指未来的某一个时刻事务可能要加共享锁或者排它锁,提前声明一个意向,分为两种:

意向共享锁(Intention Shared Lock) IS 事务有意向对表中的某些行加共享锁(S锁)

意向排它锁(Intention Exclusive Lock)IX 事务有意向对表中的某些行加排他锁(X锁)

记录锁(Record Locks) 官方原文

SELECT c1 FROM t WHERE c1 = 10 FOR UPDATE; 这一行则是使用了记录锁,不允许其他事务进行增,删,改 但是SELECT c1 FROM t WHERE c1 = 10; 是没有锁的,走的是快照读,上文已经阐明过了 记录锁本身不是锁定记录数据本身而是锁定索引记录,如果要锁的列没有索引,则会进行全表记录加锁

间隙锁(Gap Locks) 官方原文

比如SELECT c1 FROM t WHERE c1 BETWEEN 10 and 20 FOR UPDATE ; 插入 c1 为 15 的记录会被锁定不可执行 这种默认存在于可重复读的事务隔离级别中的锁,锁定被圈定的范围不允许 insert,防止不可重复读,上文说了我们的事务隔离级别都是读已提交,默认会产生不可重复读的问题

若对本页面资源感兴趣,请点击下方或右方图片,注册登录后

搜索本页相关的【资源名】【软件名】【功能词】或有关的关键词,即可找到您想要的资源

如有其他疑问,请咨询右下角【在线客服】,谢谢支持!

MySQL 意向锁类型:不同粒度的锁定策略分析 第2张

发表评论

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~
欢迎你第一次访问网站!