MySQL InnoDB 意图锁用于啥?

     2023-03-22     14

关键词:

【中文标题】MySQL InnoDB 意图锁用于啥?【英文标题】:What are MySQL InnoDB intention locks used for?MySQL InnoDB 意图锁用于什么? 【发布时间】:2016-08-25 14:40:53 【问题描述】:

我已经阅读了关于意图锁的MySQL手册: http://dev.mysql.com/doc/refman/5.5/en/innodb-locking.html#innodb-intention-locks

它说“使多粒度级别的锁定变得实用”,但是如何实现呢?它没有告诉我们。

谁能给个详细的解释和示例?

【问题讨论】:

【参考方案1】:

将 InnoDB 数据空间视为数据库的集合,每个数据库都是表的集合,每个表都是行的集合。这形成了一个层次结构,其中越来越低的级别提供越来越多的粒度。

现在,当你想在事务中更新这棵树的某些部分时,你是怎么做的?好吧,InnoDB 雇佣了multiple granularity locking (MGL)。 MGL 中的机制是您指定“意图”以在特定粒度级别锁定为共享或独占,然后 MGL 将所有这些意图组合在一起并沿层次结构向上移动,直到找到在给定这些意图时必须锁定的最小跨度集.

如果没有意向锁,您将拥有高级别的共享独占锁,它们实际上并没有给您太大的灵活性:它们全有或全无,这就是我们见 MyISAM。但是 MGL 带来了 intended sharedintended exclusive 的概念,正如我上面所说的那样,它使用它们来提供“刚好够用”的锁定。

如果您想了解具体的 C 级实现,请参考Introduction to Transaction Locks in InnoDB。

【讨论】:

还是有点抽象。你能举一些例子吗。比如给出一个示例表和示例 sql 来展示它是如何工作的。

mysql-锁

InnoDB行锁实现方式InnoDB行锁是通过给索引上的索引项加锁来实现的,这一点MySQL与Oracle不同,后者是通过在数据块中对相应数据行加锁来实现的。InnoDB这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB才使用行级锁,... 查看详情

mysql加锁过程详解-innodb下的记录锁,间隙锁,next-key锁(代码片段)

...date/lockinsharemode对事务并发性影响Mysql加锁过程详解(5)-innodb多版本并发控制原理详解Mysql加锁过程详解(6)-数据库隔离级别(1)Mysql加锁过程详解(6)-数据库隔离级别(2)-通过例子理解事务的4种隔离级别Mysql加锁过程详解... 查看详情

mysql锁—innodb锁的基本概念

 参考:《mysql内核:innodb存储引擎》 第九章         MySQL·引擎特性·InnoDB事务锁系统简介:http://mysql.taobao.org/monthly/2016/01/01/         MySQL·引擎特性·Innodb锁子系统浅析:http://mysql.taobao.org/monthly/2017/12/02... 查看详情

MySQL INNODB 微调在啥时候成为要求?

】MySQLINNODB微调在啥时候成为要求?【英文标题】:AtwhatpointdoesMySQLINNODBfinetuningbecomearequirement?MySQLINNODB微调在什么时候成为要求?【发布时间】:2011-07-1200:42:30【问题描述】:我看过这个:http://www.mysqlperformanceblog.com/2009/01/12/shoul... 查看详情

mysql_innodb的锁和事务模型(代码片段)

...数据库迁移到MySQL;想要进行MySQL性能调优;那么学习和掌握InnoDB的锁和事务模型就非常有用。文章目录14.7.1InnoDB中的锁共享锁与排他锁意向锁记录锁间隙锁临键锁插入意向锁自增锁空间索引使用的谓词锁14.7.2InnoDB事务模型14.7.2.1事... 查看详情

mysql简单介绍——换个角度认识mysql

参考技术A1、InnoDB存储引擎Mysql版本>=5.5默认的存储引擎,MySQL推荐使用的存储引擎。支持事务,行级锁定,外键约束。事务安全型存储引擎。更加注重数据的完整性和安全性。存储格式:数据,索引集中存储,存储于同一个表空... 查看详情

mysql巡检查看参数

锁等待Innodb_row_lock_current_waits当前等待的待锁定的行数Innodb_row_lock_waits一行锁定必须等待的总时长Table_locks_waited表锁等待次数mysql锁监控表级锁Table_locks_waitedTable_locks_immediate行级锁Innodb_row_lock_current_waits当前等待锁的行锁数量Innodb... 查看详情

mysql&innodb锁机制全面解析(代码片段)

这里写目录标题一、前言二、锁的类型2.1全局锁2.2表级锁2.2.1表锁2.2.2元数据锁(MetaDataLocks)2.2.3自增列锁(AUTO-INCLocks)2.2.4意向锁(IntentionLocks)2.3行级锁2.3.1RecordLocks2.3.2GapLocks2.3.3Next-KeyLo 查看详情

mysql锁--02---行锁(记录锁(recordlocks))(代码片段)

...何生成可参考右边的帮助文档文章目录前置知识行锁特点InnoDB与MyISAM的最大不同有两点:==行锁支持事务==ACID并发事务带来的问题事务隔离级别常看当前数据库的事务隔离级别:showvariableslike'tx_isolation';M... 查看详情

mysql中那些锁机制之innodb

Mysql中那些锁机制之InnoDBhttp://www.2cto.com/database/201508/429967.html我们知道mysql在以前,存储引擎默认是MyISAM,但是随着对事务和并发的要求越来越高,便引入了InnoDB引擎,它具有支持事务安全等一系列特性。 InnoDB锁... 查看详情

如果我杀死一个巨大的 MySQL InnoDb DELETE 查询会发生啥?

】如果我杀死一个巨大的MySQLInnoDbDELETE查询会发生啥?【英文标题】:WhatwillhappenifIkillahugeMySQLInnoDbDELETEQuery?如果我杀死一个巨大的MySQLInnoDbDELETE查询会发生什么?【发布时间】:2012-10-2422:34:23【问题描述】:我目前正在运行DELETE... 查看详情

mysql查看锁的sql(代码片段)

...看锁的sql查看数据库状态#会显示加锁的信息等等showengineinnodbstatus;查看正在执行的线程信息showfullprocesslist;查看正在锁的表showopentableswherein_use>0;showopentables;查看锁的类型、状态showstatuslike'%lock%';5.0后,增加了3个关于... 查看详情

mysql各类锁查看方法(代码片段)

--查看当前所有事务select*frominformation_schema.innodb_trx;--查看正在锁的事务select*frominformation_schema.innodb_locks;--查看等待锁的事务select*frominformation_schema.innodb_lock_waits;--查看表锁showopentableswhereIn_use>0;- 查看详情

mysql各类锁查看方法(代码片段)

--查看当前所有事务select*frominformation_schema.innodb_trx;--查看正在锁的事务select*frominformation_schema.innodb_locks;--查看等待锁的事务select*frominformation_schema.innodb_lock_waits;--查看表锁showopentableswhereIn_use>0;- 查看详情

mysql面试题整理(代码片段)

1myisam和innodb引擎的区别innodb支持事务,外键,myisam不支持innodb支持mvcc,myisam不支持innodb支持表锁、行锁,myisam仅支持表锁innodb必须有主键,myisam不需要2mysql有几种锁按锁粒度划分有三种:表锁、页锁、行锁加... 查看详情

mysql数据库3种存储引擎有啥区别?

参考技术AMySQL常见的三种存储引擎为InnoDB、MyISAM和MEMORY。其区别体现在事务安全、存储限制、空间使用、内存使用、插入数据的速度和对外键的支持。具体如下:1、事务安全:InnoDB支持事务安全,MyISAM和MEMORY两个不支持。2、存... 查看详情

mysql:行锁表锁乐观锁悲观锁读锁写锁

...足。在DBMS中,可以按照锁的粒度把数据库锁分为行级锁(INNODB引擎)、表级锁(MYISAM引擎)和页级锁(BDB引擎)。行锁锁定整个行数据,开销大,加锁慢,会出现死锁。锁定粒度小,发生锁冲突的概率低,并发度高。表锁锁定整个表数... 查看详情

mysql中innodb的行锁算法

参考技术A众所周知,innodb是默认行锁,当然也支持表锁。如下是对于行锁的算法进行的一些实验。锁的算法为:我知道是行锁,但是是如何锁的,锁多少数据假如有个索引是:[1,2,3,7]recordlock锁的是1,2,3,7gaplock锁的是(-,... 查看详情