`
xiangxingchina
  • 浏览: 507780 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【转】InnoDB锁定模式

阅读更多

InnoDB实现标准行级锁定,在这里有两种类型的锁: locks:
·共享的(S )锁允许一个事务去读一行(tuple)。
·独占的锁(X )允许一个事务更新或删除一行。

如果事务A 在tuple t 上持有独占锁定,来自不同事务B 的对t 上任一类型的锁的请求不被马上许可,取而代之地,事务B 不得不等待事务t释放在tuple t 上的锁。

如果事务 A 在tuple t 上持有一个共享的锁(S ),那么:
·来自不同的事务B 对在tX 的锁定请求不能被马上许可。
·来自不同的事务B 对在tS 的锁定请求可以被马上获准。因此AB 持有t 上的S 锁定。

不仅如此,InnoDB支持多间隔尺寸锁定 ,它允许记录锁和对整个表的锁共存。要使得多间隔尺寸级别的锁定实际化,额外类型的锁,被称为intention locks 被使用。在InnoDB中,意图锁定是表锁定。 对于一个事务,意图锁定之后理想的是指明在该表中对一个行随后需要哪一类型的锁定(共享还是独占)。

有两种意图锁被用在InnoDB中(假设事务T 在表R 中要求一个已指出的类型的锁):
·意图共享(IS ):事务T 意图给表T 上单独的tuple设置S 锁定。
·意图独占(IX ):事务T 意图给这些tuple设置X 锁定。

意图锁协议如下:
·在假设的事务可以获得对某假定行的S 锁定之前,它必须首先获得对包含该行的表的一个IS 或者更强的锁定。
·在假设的事务可以获得对某假定行的X 锁定之前,它必须首先获得对包含该行的表的一个IX 锁定。

这些结果可以方便地用一个锁类型兼容矩阵来总结:



X
IX
S
IS
X
冲突
冲突
冲突
冲突
IX
冲突
兼容
冲突
兼容
S
冲突
冲突
兼容
兼容
IS
冲突
兼容
兼容
兼容


如果一个锁定与现在锁定兼容的话,它被授给一个委托事务。如果一个锁定与现存锁定冲突,它就不被授予一个委托事务。事务等待着直到冲突的现存锁定被释放掉。如果一个锁定请求与现存锁定相冲突,且不能被授予,因为它可能会导致死锁,一个错误产生。
因此,意图锁定不阻碍任何东西,除了完全表请求(比如LOCK TABLES ... WRITE)。IXIS 锁定的主要目的是显示某人正锁定一行,或将要在表中锁定一行。
下列的例子演示当锁定请求可能会导致死锁之时一个错误会如何发生。例子中包括两个客户端A和B。
首先客户端A创建一个包含一个行的表,然后开始一个事务。在这个事务内,A通过在共享模式选择行获得对行的S 锁定:
mysql> CREATE TABLE t (i INT) ENGINE = InnoDB;
Query OK, 0 rows affected (1.07 sec)
mysql> INSERT INTO t (i) VALUES(1);
Query OK, 1 row affected (0.09 sec)
mysql> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT * FROM t WHERE i = 1 LOCK IN SHARE MODE;
+------+
| i        |
+------+
|1        |
+------+
1 row in set (0.10 sec)

接着,客户端B开始一个事务并尝试从该表删除行:
mysql> START TRANSACTION; Query OK, 0 rows affected (0.00 sec) mysql> DELETE FROM t WHERE i = 1; 删除操作要求一个X 锁定。因为这个锁定不兼容客户端A持有的S 锁定,所以X 锁定不被允许,所以请求进入对行及客户端阻挡的锁定请求队列。

最后,客户端A也试图从表中删除该行:
mysql> DELETE FROM t WHERE i = 1;
ERROR 1213 (40001): Deadlock found when trying to get lock;try restarting transaction

因为客户端A需要一个X 锁定来删除该行,所以在这里发生死锁。尽管如此,锁定请求不被允许,因为客户端B已经有一个对X 锁定的请求并且它正等待客户端A释放S 锁定。因为客户端B之前对X 锁定的请求,被客户端A持有的S 锁定也不能升级到X 锁定。因此,InnoDB对客户端A产生一个错误,并且释放它的锁定。在那一点上,客户端B的锁定请求可以被许可,并且客户端B从表中删除行。

分享到:
评论

相关推荐

    浅谈InnoDB隔离模式的使用对MySQL性能造成的影响

    在这篇文章里我将讨论一个相关的主题 – InnoDB 事务隔离模式,还有它们与MVCC(多版本并发控制)的关系,以及它们是如何影响MySQL性能的。 MySQL手册提供了一个关于MySQL支持的事务隔离模式的恰当描述 – 在这里我...

    InnoDB中的MVCC

    什么是MVCC MVCC即Multi-Version Concurrency Control,译为多版本并发控制。 MVCC的背景 MySQL的大多数事务型存储引擎实现...虽然实现机制有所不同,但大都实现了非阻塞的读操作,写操作也只锁定必要的行。 MVCC的实现

    mysql-batch:小批量运行大型MySQL UPDATE和DELETE查询,以防止表行级锁定

    该工具将小批量运行UPDATE和DELETE查询,以防止表级和行级锁定(使用InnoDB)。 如果必须更新或删除大量行,则也可以限制一次选择的行数。安装 pip3 install mysql_batchUPDATE示例您可以使用可用的模式运行此示例...

    一个B2C模式的电商平台,销售自营商品给客户.zip

    例如,InnoDB提供事务安全、行级锁定和外键约束,适合处理高并发事务性的应用;MyISAM则更侧重于读取密集型操作,提供全文索引支持,适用于读多写少的场景。这种多引擎架构使得MySQL能够适应不同业务需求,提供高度...

    详解mysql 中的锁结构

    Mysql 支持3中锁结构 表级锁,开销小,加锁快,不会出现死锁,锁定的粒度大,冲突概率高,并发度最低 ...InnoDB的行锁模式及加锁方法 InnoDB实现了以下两种类型的行锁。 共享锁(s):允许一个事务去读一行,阻止其他事务获

    基于servlet+jsp+mysql+MVC模式的学生选课管理系统.zip

    例如,InnoDB提供事务安全、行级锁定和外键约束,适合处理高并发事务性的应用;MyISAM则更侧重于读取密集型操作,提供全文索引支持,适用于读多写少的场景。这种多引擎架构使得MySQL能够适应不同业务需求,提供高度...

    mysql数据库my.cnf配置文件

    # InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间 # 独立表空间优点: # 1.每个表都有自已独立的表空间。 # 2.每个表的数据和索引都会存在自已的表空间中。 # 3.可以实现单表在不同的数据库中...

    2019最新21个MySQL高频面试题介绍

    在缺省模式下,MYSQL 是 autocommit 模式的,所有的数据库更新操作都会即时提交,所 以在缺省情况下,mysql 是不支持事务的。 但是如果你的 MYSQL 表类型是使用 InnoDB Tables 或 BDB tables 的话,你的 MYSQ

    基于MVC模式的简单购物车实验,JavaWeb作业。Servelet Mysql JSP .zip

    例如,InnoDB提供事务安全、行级锁定和外键约束,适合处理高并发事务性的应用;MyISAM则更侧重于读取密集型操作,提供全文索引支持,适用于读多写少的场景。这种多引擎架构使得MySQL能够适应不同业务需求,提供高度...

    SSM为基本框架 一款基于O2O模式的校园电商平台.zip

    例如,InnoDB提供事务安全、行级锁定和外键约束,适合处理高并发事务性的应用;MyISAM则更侧重于读取密集型操作,提供全文索引支持,适用于读多写少的场景。这种多引擎架构使得MySQL能够适应不同业务需求,提供高度...

    Java网上书店管理系统(基于MVC模式编写:前端jsp页面、数据库MySQL、服务器Tomcat).zip

    例如,InnoDB提供事务安全、行级锁定和外键约束,适合处理高并发事务性的应用;MyISAM则更侧重于读取密集型操作,提供全文索引支持,适用于读多写少的场景。这种多引擎架构使得MySQL能够适应不同业务需求,提供高度...

    javaweb(jsp)-课程设计-图书购物网站,基于JSP(MVC模式)和MySQL的网上图书购物系统.zip

    例如,InnoDB提供事务安全、行级锁定和外键约束,适合处理高并发事务性的应用;MyISAM则更侧重于读取密集型操作,提供全文索引支持,适用于读多写少的场景。这种多引擎架构使得MySQL能够适应不同业务需求,提供高度...

    mysql-online-schema-change:一个用于执行 mysql 在线模式更改表的工具

    MySQL 在线架构更改 警告 - 此包会影响数据库表中... 然后,该程序包锁定表,在使用适用于锁定表的ALTER TABLE语法重命名表之前最后一次重播任何新更改(与RENAME TABLE不同) 我如何使用它? 直接下载phar存档 curl

    MySQL 5.1中文手冊

    前言 1. 一般信息 1.1. 关于本手册 1.2. 本手册采用的惯例 1.3. MySQL AB概述 ... InnoDB事务模型和锁定 15.2.11. InnoDB性能调节提示 15.2.12. 多版本的实施 15.2.13. 表和索引结构 15.2.14. 文件空间管理和磁盘I...

    MySQL 5.1参考手册 (中文版)

    目录 前言 1. 一般信息 1.1. 关于本手册 1.2. 本手册采用的惯例 1.3. MySQL AB概述 ... InnoDB事务模型和锁定 15.2.11. InnoDB性能调节提示 15.2.12. 多版本的实施 15.2.13. 表和索引结构 15.2.14. 文件空间管理...

    毕业设计,《基于Android的智慧体育平台家长模块设计与实现》.zip

    例如,InnoDB提供事务安全、行级锁定和外键约束,适合处理高并发事务性的应用;MyISAM则更侧重于读取密集型操作,提供全文索引支持,适用于读多写少的场景。这种多引擎架构使得MySQL能够适应不同业务需求,提供高度...

    mysql官方中文参考手册

    MySQL 5.1参考手册 目录 前言 1. 一般信息 1.1. 关于本手册 1.2. 本手册采用的惯例 1.3. MySQL AB概述 ... InnoDB事务模型和锁定 15.2.11. InnoDB性能调节提示 15.2.12. 多版本的实施 15.2.13. 表和索引结构 15.2....

    MYSQL中文手册

    1.8.3. 在ANSI模式下运行MySQL 1.8.4. MySQL对标准SQL的扩展 1.8.5. MySQL与标准SQL的差别 1.8.6. MySQL处理约束的方式 2. 安装MySQL 2.1. 一般安装问题 2.1.1. MySQL支持的操作系统 2.1.2. 选择要安装的...

    MySQL 5.1参考手册中文版

    1.8.3. 在ANSI模式下运行MySQL 1.8.4. MySQL对标准SQL的扩展 1.8.5. MySQL与标准SQL的差别 1.8.6. MySQL处理约束的方式 2. 安装MySQL 2.1. 一般安装问题 2.1.1. MySQL支持的操作系统 2.1.2. 选择要安装的MySQL...

    MySQL 5.1参考手册

    MySQL 5.1参考手册.chm 前言 1. 一般信息 1.1. 关于本手册 1.2. 本手册采用的惯例 1.3. MySQL AB概述 ... InnoDB事务模型和锁定 15.2.11. InnoDB性能调节提示 15.2.12. 多版本的实施 15.2.13. 表和索引结构 15.2.14...

Global site tag (gtag.js) - Google Analytics