• 进入"运维那点事"后,希望您第一件事就是阅读“关于”栏目,仔细阅读“关于Ctrl+c问题”,不希望误会!

标签:MySQL InnoDB事务与锁

MySQL InnoDB插入意向锁

INSERT INTENTION LOCK,翻译为插入意向锁,锁类型为 LOCK_INSERT_INTENTION,其实准确来说应该是 INSERT INTENTION GAP LOCK,属于 GAP LOCK 子类。这个锁类型在老版本的 InnoDB 中并不存在,后来是为了优化插入性能而设计的。 INSERT INTENTION LOCK 在官方文档中的说……

MySQL RR隔离级别死锁问题剖析

本案例在RR隔离级别下,模拟数据如下: CREATE TABLE `ty` ( `id` int(11) NOT NULL AUTO_INCREMENT, `a` int(11) DEFAULT NULL, `b` int(11) DEFAULT NULL, PRIMARY KEY (`id`), ……

MySQL InnoDB RR隔离级别下INSERT…SELECT对SELECT表加锁模型和死锁案列

最近有网友遇到了在RR隔离级别下insert A select B where B.COL=** 由于select表也就是B表引发的死锁的问题。分析死锁日志后,笔者进行模拟重现了这位网友遇到了2种场景并且在本文中进行详细的描述。 本文使用版本Percona 5.7.14修改版,能够打印出事务所有的行锁信息结构链(不包含隐含锁) 本文中的测试是在RR隔离级……

MySQL InnoDB自增锁和外键锁

一、自增长与锁 自增长在数据库中是非常常见的一种属性,也是很多DBA或开发人员首选的主键方式。在InnoDB存储引擎的内存结构中,对每个含有自增长值的表都有一个自增长计数器。当对含有自增长的计数器的表进行插入操作时,这个计数器会被初始化,执行如下的语句来得到计数器的值: select max(auto_inc_col) from……

MySQL分布式事务

一、分布式事务 在说分布式事务(XA)之前,可以先看一下“以交易系统为例,看分布式事务架构的五大演进”,阐述了分布式事务解决了什么问题? InnoDB存储引擎提供了对XA事务的支持,并通过XA事务来支持分布式事务的实现。分布式事务指的是允许多个独立的事务资源参与到一个全局的事务中。事务资源通常是关系型数据库系统,但也可以是其他类型的资源。全局事务要求在其中的……

以交易系统为例,看分布式事务架构的五大演进

一、概述 在支付、交易、订单等强一致性系统中,我们需要使用分布式事务来保证各个数据库或各个系统之间的数据一致性。举个简单的例子来描述一下这里数据一致性的含义。 程序员小张向女友小丽转账100人民币,转账过程是:先扣除小张100元,再为小丽的账户添加100元。 如果在转帐过程中,扣款操作和打款操作要么同时执行,要么同时都不执行,我们就认为转帐过……

理解悲观锁与乐观锁

在数据库的锁机制中介绍过,数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和一致性以及数据库的一致性。 乐观并发控制(乐观锁)和悲观并发控制(悲观锁)是并发控制主要采用的技术手段。无论是悲观锁还是乐观锁,都是人们定义出来的概念,可以认为是一种思想。其实不仅仅是数据库系统中有乐观锁和悲观锁的概念,像mem……

一个最不可思议的MySQL死锁分析

  http://hedengcheng.com/?p=844 ……

MySQL InnoDB事务隔离级别

一、事务隔离级别 一个支持事务的关系型数据库必须要必备ACID(Atomicity、Consistency、Isolation、Durability,即原子性、一致性、隔离性、持久性),今天我们就来说说其中 Isolation,也就是“隔离性”。当数据库上有多个事务同时执行的时候,就可能出现脏读(dirty read)、不可重复读(non-repeatabl……

MySQL InnoDB事务编写语法

一、事务控制语句 对于一个事务存储引擎来说如果没有明确启动一个事务,默认是能实现自动提交每一个操作都能直接提交。而MySQL默认采用自动提交模式。也就是说,在 InnoDB 中,所有的用户操作均是以事务方式处理的如果不是显式地开始一个事务,每个 SQL 语句将以一个单独的事务来处理。MySQL 通常是以自动提交方式建立一个服务连接的。查看变量autocomm……

MySQL InnoDB单机事务原理

一、事务简介 事务(transaction)是数据库区别于文件系统的一个重要特性,事务意为一系列操作的集合,具有 ACID 的特性,能将数据库从一个一致的状态转换到另一个状态。 简单说事务就是由一组 SQL 语句组成的一个执行单元,在这组执行单元中的所有语句要么全部执行成功,要么全部执行失败。 在 MySQL 中,InnoDB 存储引擎支持事务操作,这里也主……

MySQL InnoDB死锁及死锁检测(四)

一、MySQL InnoDB死锁阐述 在MySQL中,当两个或以上的事务相互持有和请求锁,并形成一个循环的依赖关系,就会产生死锁。多个事务同时锁定同一个资源时,也会产生死锁。在一个事务系统中,死锁是确切存在并且是不能完全避免的。 InnoDB会自动检测事务死锁,立即回滚其中某个事务,并且返回一个错误。它根据某种机制来选择那个最简单(代价最小)的事务来进行回滚……