mysql innodb插入意向锁

innodb中有插入意向锁。专门针对insert,假设插入前,该间隙已经由gap锁,那么Insert会申请插入意向锁。

那么这个插入意向锁的作用是什么?

1、为了唤起等待。由于该间隙已经有锁,插入时必须堵塞。插入 意向锁的作用具有堵塞功能。

2、插入意向锁是一种特殊的间隙锁,既然是一种间隙锁,为什么不直接使用间隙锁?

间隙锁之间不相互排斥。不可以堵塞即唤起等待,会造成幻读。

3、为什么不使用记录锁或next-key锁?

申请了记录所或next-key锁,next-key锁之间可能相互排斥,即影响insert的并发性。

不知道这样理解是否正确,各位有研究过插入意向锁的是否能给个建议?

时间: 2024-10-15 07:53:14

mysql innodb插入意向锁的相关文章

MySQL Innodb 插入速率优化

批量[更新/插入]百万以上数据时,每次2w条,超过10w条以后效率线性下降.参考本文设置效果不明显,原因可能是因为索引的问题. 继续查.不过此文质量不错. ============================== MySQL 从最开始的时候 1000条/分钟的插入速度调高至 10000条/秒. 相信大家都已经等急了相关介绍,下面我做调优时候的整个过程.提高数据库插入性能中心思想: 1.尽量使数据库一次性写入Data File 2.减少数据库的checkpoint 操作 3.程序上尽量缓冲数据

从一个死锁看mysql innodb的锁机制

背景及现象 线上生产环境在某些时候经常性的出现数据库操作死锁,导致业务人员无法进行操作.经过DBA的分析,是某一张表的insert操 作和delete操作发生了死锁.简单介绍下数据库的情况(因为涉及到真实数据,这里做了模拟,不影响具体的分析和分析的结果.)假设存在如下2张表: Order 表的数据如下: Customer表的数据如下: Order和Customer 在实体关系上存在一个关联,即order实体拥有一个指向customer实体的指针.在数据库设计的时 候,order表的custome

mysql innodb的锁机制分析

线上生产环境在某些时候经常性的出现数据库操作死锁,导致业务人员无法进行操作.经过DBA的分析,是某一张表的insert操作和delete操作发生了死锁.简单介绍下数据库的情况(因为涉及到真实数据,这里做了模拟,不影响具体的分析和分析的结果.)假设存在如下2张表: Order 表的数据如下: Customer表的数据如下: Order和Customer 在实体关系上存在一个关联,即order实体拥有一个指向customer实体的指针.在数据库设计的时候,order表的customer_id没有被设

MySQL Innodb 中的锁

MySQL Innodb 中的锁 锁是用来解决并发冲突的必要手段,MySQL 中的并发主要是指多个线程同时对同一个数据库进行操作,其中不同线程可能代表不同的事务,本质上也就是对共享资源的不同事务的同时访问. Innodb 支持行级锁和意向锁.行级锁就是对行记录进行加锁,行级锁也分为两种类型,一种是共享锁( S 锁),一种是排他锁( X 锁).意向锁为表级别的锁,也就是将锁定的对象分为多个层次,意向锁意味着事务希望在更细粒度上进行加锁,一般来说,意向锁是从上往下(数据库->表->页->记录

MySQL InnoDB 存储引擎探秘

在MySQL中InnoDB属于存储引擎层,并以插件的形式集成在数据库中.从MySQL5.5.8开始,InnoDB成为其默认的存储引擎.InnoDB存储引擎支持事务.其设计目标主要是面向OLTP的应用,主要特点有:支持事务.行锁设计支持高并发.外键支持.自动崩溃恢复.聚簇索引的方式组织表结构等. 体系架构 InnoDB存储引擎是由内存池.后台线程.磁盘存储三大部分组成. 线程 InnoDB 使用的是多线程模型, 其后台有多个不同的线程负责处理不同的任务 Master Thread Master T

mysql InnoDB加锁测试

以下测试基于mysql5.7,隔离级别为:REPEATABLE READ 建表语句如下: create table mytest ( a int primary key AUTO_INCREMENT, b int , c int, d int, KEY idx_b (b), KEY idx_c (c), UNIQUE idx_d (d) ) ENGINE=InnoDB; insert into mytest (b, c,d) VALUES (1,1,1),(3,1,3),(5,3,6),(7,6

一文快速搞懂MySQL InnoDB事务ACID实现原理

[51CTO.com原创稿件]说到数据库事务,想到的就是要么都做修改,要么都不做,或者是 ACID 的概念.其实事务的本质就是锁.并发和重做日志的结合体. 这一篇主要讲一下 InnoDB 中的事务到底是如何实现 ACID 的: 原子性(atomicity) 一致性(consistency) 隔离性(isolation) 持久性(durability)隔离性隔离性的实现原理就是锁,因而隔离性也可以称为并发控制.锁等.事务的隔离性要求每个读写事务的对象对其他事务的操作对象能互相分离.再者,比如操作缓

浅谈mysql innodb缓存策略

浅谈mysql innodb缓存策略: The InnoDB Buffer Pool Innodb 持有一个存储区域叫做buffer pool是为了在内存中缓存数据和索引,知道innodb bufferpool怎么工作,和利用它读取频繁访问的数据,是mysql优化重要的方面. 理想状况下,把bufferpool的大小调整到足够大,留下足够的内存空间给其他该服务器上的进程(使其无缺页即可).bufferpool越大,innodb 月表现为内存型数据库,从硬盘上一次读取数据,之后并成了从内存中读取数

mysql innodb 性能优化

默认情况下,innodb的参数设置的非常小,在生产环境中远远不够用比如最重要的两个参数innodb_buffer_pool_size 默认是8Minnodb_flush_logs_at_trx_commit 默认设置的是1 也就是同步刷新log(可以这么理解) innodb_buffer_pool_size: 这是InnoDB最重要的设置,对InnoDB性能有决定性的影响.默认的设置只有8M,所以默认的数据库设置下面InnoDB性能很差.在只有 InnoDB存储引擎的数据库服务器上面,可以设置6