- 浏览: 507780 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (422)
- 重要 (12)
- BUG解决备忘录 (32)
- 环境搭建 (17)
- 开源组件 (4)
- 数据库 (16)
- 设计模式 (4)
- 测试 (3)
- javascript (5)
- Android (14)
- jdk相关 (9)
- struts2 (10)
- freemark (3)
- 自定义扩展及工具类 (5)
- jdk5新特性及java基础 (13)
- ssh及其他框架 (15)
- linux (32)
- tcp-ip http协议 (8)
- 服务器集群与负载均衡 (34)
- 项目管理相关 (11)
- 实用小技术 (10)
- 架构相关 (14)
- firefox组件 (11)
- spider (6)
- 产品设计 (11)
- PHP (1)
- ws (4)
- lucene (10)
- 其他 (2)
- BI (1)
- NoSQL (3)
- gzip (1)
- ext (4)
- db (6)
- socket (1)
- 源码阅读 (2)
- NIO (2)
- 图片处理 (1)
- java 环境 (2)
- 项目管理 (4)
- 从程序员到项目经理(一):没有捷径 (1)
- bug (1)
- JAVA BASE (8)
- 技术原理 (0)
- 新框架新技术 (1)
- 量化与python (1)
- 系统编程 (0)
- C语言 (0)
- 汇编 (0)
- 算法 (0)
最新评论
-
hyspace:
别逗了,最后一个算法根本不是最优的,sort(function ...
数组去重——一道前端校招试题 -
washingtin:
楼主能把策略和路由的类代码贴出来吗
Spring + iBatis 的多库横向切分简易解决思路 -
sdyjmc:
初略看了一下,没有闹明白啊,均衡负载使用Nginx,sessi ...
J2EE集群原理 I -
shandeai520:
谢谢大神!请教大神一个问题:假如我有三台服务器,连接池的上限是 ...
集群和数据库负载均衡的研究 -
hekuilove:
给lz推荐一下apache commonsStringUtil ...
request 获取 ip
InnoDB实现标准行级锁定,在这里有两种类型的锁: locks:
·共享的(S
)锁允许一个事务去读一行(tuple)。
·独占的锁(X
)允许一个事务更新或删除一行。
如果事务A
在tuple t
上持有独占锁定,来自不同事务B
的对t
上任一类型的锁的请求不被马上许可,取而代之地,事务B
不得不等待事务t释放在tuple t
上的锁。
如果事务 A
在tuple t
上持有一个共享的锁(S
),那么:
·来自不同的事务B
对在t
上X
的锁定请求不能被马上许可。
·来自不同的事务B
对在t
上S
的锁定请求可以被马上获准。因此A
和B
持有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)。IX
和IS
锁定的主要目的是显示某人正锁定一行,或将要在表中锁定一行。
下列的例子演示当锁定请求可能会导致死锁之时一个错误会如何发生。例子中包括两个客户端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从表中删除行。
发表评论
-
One of the two will be used. Which one is undefined.
2019-04-22 23:13 553Mac版IntelliJ IDEA Class JavaLa ... -
Eclipse不提示的解决办法
2012-11-20 11:40 1256我们知道,在Eclipse中可 ... -
Hibernate-Validation的使用
2012-03-18 11:56 1409以前弄过hibernate-validation的,可今天 ... -
web.xml配置错误页面不起作用
2010-12-15 00:08 1032出现异常时没有进入到 common/500.jsp 页面 ... -
struts2 :Unable to load configuration. ……struts-default.xml:46:178异常解
2010-12-08 09:38 1095这个问题是缺 ... -
jsp中EL表达式不能显示的解决方法
2010-12-04 23:23 2355网友一:jsp中EL表达式 ... -
FreeMark常用内置函数使用说明
2010-11-27 11:59 845在我们应用Freemarker过程中,经常会操作例如字符串,数 ... -
lucene 排序
2010-11-18 18:42 935Lucene的默认排序是按照D ... -
设置tomcat内存
2010-11-02 10:21 1255设置tomcat内存 大家都 ... -
没有启动服务器服务,此时尚未创建共享资源的解决方法是什么
2010-11-01 10:57 1711方法一: 在桌面=>>我的电脑=>> ... -
struts2+displaytag翻页时Inappropriate OGNL expression解决方案(solution)
2010-10-23 11:21 1439相信肯定有人遇到这个问题: struts2+displa ... -
Tomcat性能参数
2010-10-21 23:40 1214maxThreads:Tomcat能处理的最大请求数(To ... -
多线程往Oracle数据库里插入数据的优化
2010-10-21 23:39 4530昨 天做了一个东西,要实现解析txt文件,然后入库的功 ... -
JSTL操作Map
2010-10-21 23:38 23391、迭代 当forEach 的items属性中的 ... -
Quartz的cron表达式
2010-10-21 23:37 795一个cron表达式有至少6 ... -
IBatis的缓存
2010-10-21 23:31 874在xml配置文件中,每一个 cacheModel 元素,如下 ... -
Hibernate中get和load方法的区别
2010-10-21 23:27 728Hibernate3.2 Session加载数据时get和lo ... -
java的堆与栈的区别
2010-10-21 23:27 700Java的堆是一个运行时数据区,类的对象从中分配空间 。这些对 ... -
IBatis和Spring结合时的Blob乱码处理
2010-10-21 23:24 1550按照网上说的Spring和IBatis结合的时候要用以下配置进 ... -
经典SQL语句集锦
2010-10-18 20:40 859转自: http://blog.csdn.net/shixin ...
相关推荐
在这篇文章里我将讨论一个相关的主题 – InnoDB 事务隔离模式,还有它们与MVCC(多版本并发控制)的关系,以及它们是如何影响MySQL性能的。 MySQL手册提供了一个关于MySQL支持的事务隔离模式的恰当描述 – 在这里我...
什么是MVCC MVCC即Multi-Version Concurrency Control,译为多版本并发控制。 MVCC的背景 MySQL的大多数事务型存储引擎实现...虽然实现机制有所不同,但大都实现了非阻塞的读操作,写操作也只锁定必要的行。 MVCC的实现
该工具将小批量运行UPDATE和DELETE查询,以防止表级和行级锁定(使用InnoDB)。 如果必须更新或删除大量行,则也可以限制一次选择的行数。安装 pip3 install mysql_batchUPDATE示例您可以使用可用的模式运行此示例...
例如,InnoDB提供事务安全、行级锁定和外键约束,适合处理高并发事务性的应用;MyISAM则更侧重于读取密集型操作,提供全文索引支持,适用于读多写少的场景。这种多引擎架构使得MySQL能够适应不同业务需求,提供高度...
Mysql 支持3中锁结构 表级锁,开销小,加锁快,不会出现死锁,锁定的粒度大,冲突概率高,并发度最低 ...InnoDB的行锁模式及加锁方法 InnoDB实现了以下两种类型的行锁。 共享锁(s):允许一个事务去读一行,阻止其他事务获
例如,InnoDB提供事务安全、行级锁定和外键约束,适合处理高并发事务性的应用;MyISAM则更侧重于读取密集型操作,提供全文索引支持,适用于读多写少的场景。这种多引擎架构使得MySQL能够适应不同业务需求,提供高度...
# InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间 # 独立表空间优点: # 1.每个表都有自已独立的表空间。 # 2.每个表的数据和索引都会存在自已的表空间中。 # 3.可以实现单表在不同的数据库中...
在缺省模式下,MYSQL 是 autocommit 模式的,所有的数据库更新操作都会即时提交,所 以在缺省情况下,mysql 是不支持事务的。 但是如果你的 MYSQL 表类型是使用 InnoDB Tables 或 BDB tables 的话,你的 MYSQ
例如,InnoDB提供事务安全、行级锁定和外键约束,适合处理高并发事务性的应用;MyISAM则更侧重于读取密集型操作,提供全文索引支持,适用于读多写少的场景。这种多引擎架构使得MySQL能够适应不同业务需求,提供高度...
例如,InnoDB提供事务安全、行级锁定和外键约束,适合处理高并发事务性的应用;MyISAM则更侧重于读取密集型操作,提供全文索引支持,适用于读多写少的场景。这种多引擎架构使得MySQL能够适应不同业务需求,提供高度...
例如,InnoDB提供事务安全、行级锁定和外键约束,适合处理高并发事务性的应用;MyISAM则更侧重于读取密集型操作,提供全文索引支持,适用于读多写少的场景。这种多引擎架构使得MySQL能够适应不同业务需求,提供高度...
例如,InnoDB提供事务安全、行级锁定和外键约束,适合处理高并发事务性的应用;MyISAM则更侧重于读取密集型操作,提供全文索引支持,适用于读多写少的场景。这种多引擎架构使得MySQL能够适应不同业务需求,提供高度...
MySQL 在线架构更改 警告 - 此包会影响数据库表中... 然后,该程序包锁定表,在使用适用于锁定表的ALTER TABLE语法重命名表之前最后一次重播任何新更改(与RENAME TABLE不同) 我如何使用它? 直接下载phar存档 curl
前言 1. 一般信息 1.1. 关于本手册 1.2. 本手册采用的惯例 1.3. MySQL AB概述 ... InnoDB事务模型和锁定 15.2.11. InnoDB性能调节提示 15.2.12. 多版本的实施 15.2.13. 表和索引结构 15.2.14. 文件空间管理和磁盘I...
目录 前言 1. 一般信息 1.1. 关于本手册 1.2. 本手册采用的惯例 1.3. MySQL AB概述 ... InnoDB事务模型和锁定 15.2.11. InnoDB性能调节提示 15.2.12. 多版本的实施 15.2.13. 表和索引结构 15.2.14. 文件空间管理...
例如,InnoDB提供事务安全、行级锁定和外键约束,适合处理高并发事务性的应用;MyISAM则更侧重于读取密集型操作,提供全文索引支持,适用于读多写少的场景。这种多引擎架构使得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....
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. 选择要安装的...
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参考手册.chm 前言 1. 一般信息 1.1. 关于本手册 1.2. 本手册采用的惯例 1.3. MySQL AB概述 ... InnoDB事务模型和锁定 15.2.11. InnoDB性能调节提示 15.2.12. 多版本的实施 15.2.13. 表和索引结构 15.2.14...