首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

mysql innodb表级锁

基础概念

MySQL的InnoDB存储引擎支持表级锁和行级锁。表级锁是锁定整个表,而不是单个行。这意味着当一个事务锁定一个表时,其他事务不能对该表进行写操作(插入、更新、删除),直到锁被释放。

优势

  1. 简单性:表级锁的实现和管理相对简单。
  2. 资源消耗少:相比于行级锁,表级锁的资源消耗较少。

类型

InnoDB的表级锁主要有两种类型:

  1. 意向锁(Intention Locks):这是一种表级锁,用于表明事务在行级别上的锁定意图。意向锁有两种类型:意向共享锁(IS)和意向排他锁(IX)。
  2. 普通表级锁:包括共享锁(S)和排他锁(X)。

应用场景

表级锁适用于以下场景:

  1. 读多写少:当表中读取操作远多于写入操作时,表级锁可以提高性能。
  2. 低并发:在高并发环境下,表级锁可能会导致性能瓶颈,但在低并发环境下,其简单性和资源消耗少的优势可以得到体现。

常见问题及解决方法

问题1:表级锁导致死锁

原因:多个事务互相等待对方释放锁,形成死锁。

解决方法

  1. 设置超时时间:通过设置innodb_lock_wait_timeout参数,当事务等待锁的时间超过该值时,自动回滚。
  2. 优化事务:尽量减少事务的持有时间,避免长时间锁定表。
代码语言:txt
复制
SET GLOBAL innodb_lock_wait_timeout = 50; -- 设置超时时间为50秒

问题2:表级锁影响并发性能

原因:表级锁会锁定整个表,导致其他事务无法进行写操作,影响并发性能。

解决方法

  1. 使用行级锁:如果业务场景允许,尽量使用行级锁,以提高并发性能。
  2. 分表分库:通过分表分库的方式,减少单个表的数据量,从而降低锁的竞争。

问题3:表级锁导致锁等待

原因:当一个事务持有表级锁时,其他事务需要等待锁释放。

解决方法

  1. 优化查询:尽量减少查询的数据量,避免长时间持有锁。
  2. 使用乐观锁:通过版本号或其他机制实现乐观锁,减少锁的使用。

参考链接

希望以上信息对你有所帮助!

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

⑩⑦【MySQL:全局、行

全局、行 1....的分类: MySQL中的,按照的粒度分,可分为下述三类: ①全局:锁定数据库中所有的。 ②:每次操作锁住整张。 ③行:每次操作锁住对应的行数据。 2.... ,每次操作锁住整张。锁定粒度大,发生冲突的概率最高,并发度最低 。应用在MyISAM、InnoDB、BDB等存储引擎中。...行: 行,应用在InnoDB存储引擎中,每次操作锁住对应的行数据。锁定粒度最小,发生冲突的概率最低,并发度最高 。...InnoDB的行是针对于索引加的,不通过索引条件检索数据,那么InnoDB将对表中的所有记录加锁 ,此时就会升级为

38530

Mysql数据库-mysql-MyISAM-InnoDB

Mysql数据库-mysql-MyISAM-InnoDB 1 概述 “用在并发场景下 ” 机制: 数据库为了保证数据的一致性,在共享资源被并发访问时变得安全所设计的一种规则....仅从的角度来说:更适合于以查询为主,只有少量按索引条件更新数据的应用,如Web 应用;而行则更适合于有大量按索引条件并发更新少量不同数据,同时又有并查询的应用系统。...4 MyISAM MyISAM 存储引擎只支持,这也是MySQL开始几个版本中唯一支持的类型。...InnoDB 与 MyISAM 的最大不同有两点:一是支持事务;二是 采用了行InnoDB的行模式 InnoDB 实现了以下两种类型的行。...image-20200616175525671 总结 InnoDB 存储引擎由于实现了行锁定,虽然在锁定机制的实现方面带来了性能损耗可能比会更高一些,但是在整体并发处理能力方面要远远由于MyISAM

6K31
  • InnoDB中的意向,不与行冲突的

    前言 InnoDB 支持多粒度(multiple granularity locking),它允许行共存,而意向就是其中的一种。...意向(Intention Locks) 需要强调一下,意向是一种不与行冲突的,这一点非常重要。...第二个任务在锁定该前不必检查各个页或行,而只需检查表上的意向。 设想这样一张 users MySqlInnoDB,Repeatable-Read:users(id PK,name) ?...因为id 为 5 的数据行上不存在任何排他,最终事务 C 成功获取到了该数据行上的排他。 总结 InnoDB 支持多粒度,特定场景下,行可以与共存。...意向之间互不排斥,但除了 IS 与 S 兼容外,意向会与 共享 / 排他 互斥。 IX,IS是,不会和行的X,S发生冲突。只会和的X,S发生冲突。

    2.6K22

    MySQL与行

    MySQL分为读和写。...读申请成功的前提是没有线程对表加读和其他写,否则会被阻塞。 锁在MyISAM和innoDB中都有用到,创建的开销小,不会出现死锁,由于锁定的是整张,所以并发度低。...当需要频繁对大部分数据做 GROUP BY 操作或者需要频繁扫描整个时,推荐使用。 行Mysql中锁定粒度最细的一种,能大大减少数据库操作的冲突,由于其粒度小,加锁的开销最大。...共享(S LOCK) 用法:SELECT ...LOCK IN SHARE MODE; Mysql会对查询结果中的每行都加共享,当没有其他线程对查询结果集中的任何一行使用排他时,可以成功申请共享...行都是基于索引的,如果一条SQL语句用不到索引是不会使用行的,会使用。行的缺点是:由于需要请求大量的资源,所以速度慢,内存消耗大。 (责任编辑:IT)

    2.3K20

    MySQL、行、共享、排他、乐观、悲观

    一文读懂所有,了解他们的优缺点和使用场景。 与行 : table-level locking,锁住整个。 开销小,加锁快。 不会死锁(一次性加载所需的所有)。...并不是直接丢记录行加锁,而是对行对应的索引加锁: 如果sql 语句操作了主键索引,Mysql 就会锁定这条主键索引。...如果sql语句操作了非主键索引,MySQL会先锁定该非主键索引,再锁定相关的主键索引。 在InnoDB中,如果SQL语句不涉及索引,则会通过隐藏的聚簇索引来对记录加锁。...对聚簇索引加锁,实际效果跟一样,因为找到某一条记录就得扫描全,要扫描全,就得锁定。 引擎与: MyISAM引擎支持,不支持行。...InnoDB引擎支持和行,默认为行。 共享与排他 共享: 有称之为S、读

    1K20

    MySQL 核心模块揭秘 | 16 期 | InnoDB

    本文基于 MySQL 8.0.32 源码,存储引擎为 InnoDB。 正文 1. 概述 MySQL 采用插件化存储引擎,从这个角度,整体结构可以分为两层: server 层。 存储引擎。...InnoDB 支持、行、谓词(用于空间索引,我们不会介绍)。 分为共享(S)、排他(X)、意向共享(IS)、意向排他(IX)、AUTO-INC 。...答案是 MySQL 会给加元数据。...为了保证 DDL 语句和上面两种场景同时操作同一个时不会出现问题,它们都会给级别的共享或排他。 所以,InnoDB 支持级别的共享和排他是必要的。...执行 lock tables 语句的过程中,InnoDB 会给 t1 级别的共享,但是加锁之前,InnoDB 要确定没有事务正在或者将要改变(插入、更新、删除)t1 的记录。

    20911

    MySQL 机制(上) -- 全局

    按照锁定范围分 按照锁定范围,mysql可以分为: 全局 — 锁定整个 mysql 的全局执行 — 锁定单个 — 锁定单条或多条行记录 行又可以进一步细分为: 记录 —...读写与意向之间的互斥关系 读写与意向之间的互斥关系 IS IX 行 S 行 X S X IS 兼容 兼容 兼容 兼容 兼容 互斥 IX 兼容 兼容 兼容 兼容 互斥 互斥 行... MySQL 中有两种 元数据 — MDL(meta data lock) 5.1....也同样可以通过 unlock tables 命令来解锁。 由于 innodb 支持行,而锁定范围过大,通常是不被使用的。 5.2....后记 本文介绍了 MySQL 的全局以及各种的基本实现,但事实上,在 innodb 引擎中,我们最为常用的是行。 行也是所有的中相对最为复杂的,敬请期待我们下一篇文章的讲解。

    2.1K10

    Mysql千万添加字段

    MySQL数据添加新字段 有时候我们在测试环境给一个添加字段,但是在线上环境添加一个字段,却极其的慢。...原因是线上的数据库一般会存有大量的数据(百万,千万),基本的添加字段方式在线上数据库已经不太合适了。...执行加字段操作就会,这个过程可能需要很长时间甚至导致服务崩溃。...,导致新数据流失不完整 总结 生产环境MySQL添加或修改字段主要通过如下四种方式进行,实际使用中还有很多注意事项 直接添加 如果该读写不频繁,数据量较小(通常1G以内或百万以内),直接添加即可(可以了解一下...,切换后再将其他几个节点上添加字段 将现有MySQL版本5.7升到8.0.12之后的版本 相关文章 Mysql事务 Mysql中的索引 Mysql通过binlog恢复数据

    10.5K30

    mysql-innodb-

    类型 说明 级别 意向共享 IS Lock 事务想要获得一张中某几行的数据的共享 级别 意向排他IX Lock 事务想要获得一张中某几行数据的排他 级别 共享S Lock 允许事务读取一行数据...行级别 排他X Lock 允许事务更新或删除一条数据 行级别  加锁方式 记录r进行上X,先对数据库A、、页上加意向IX,才能对记录r上X。  ...下 innodb_trx事务 innodb_locks innodb_lock_wait等待 算法 3种算法 Record Lock     单行记录加锁 Gap...阻塞 一个事务中的需要等待另一个事务中的释放它所占用的资源 innodb_lock_wait_timeout来控制等待时间默认50s...Mysql5.1.22后,提供了轻量级互斥量,在内存中计算自增值提高性能 补充3-外键与 innodb外键自动加索引 插入或更新数据时,

    92230

    MySQL必懂系列》全局、行

    MySQL提供了不同等级的,按限制能力的划分,分为全局、行。本文会描述不同的应用场景与实现原理。... 也分为两类: 、 元数据(meta data lock,MDL)。 业务的更新不只是增删改数据(DML),还有可能是加字段等修改结构的操作(DDL)。... 使用场景 在还没有更细粒度的行的时候,是最长用的处理并发的解决方式。但是对于当前支持行的引擎例如innodb,都优先使用行来控制并发,以此来避免因为锁住整个的影响。...行顾名思义就是对每一行的数据加锁,这是MySQL数据库中最细粒度的,右innodb引擎支持。...对于不能支持行的引擎,对于并发操作的处理只能使用锁定整个,这也是MyISAM被innoDB所替代的重要原因之一。

    1.4K20

    mysql-innodb-

    in share mode 加S 在最前 这是读书笔记,Mysqlinnodb系列一共3篇。...Mysql-innodb-B+索引 Mysql-innodb- Mysql-innodb-事务预计20200530) 基本概念 类型说明级别意向共享 IS Lock事务想要获得一张中某几行的数据的共享级别意向排他...兼容性 ISIXSXIS兼容兼容兼容不兼容IX兼容兼容不兼容不兼容S兼容不兼容兼容不兼容X不兼容不兼容不兼容不兼容 的监控 查询的情况:information_schema下 innodb_trx...事务 innodb_locks innodb_lock_wait等待 算法 3种算法 Record Lock 单行记录加锁 Gap Lock Gap Lock间隙一个范围...Mysql5.1.22后,提供了轻量级互斥量,在内存中计算自增值提高性能 补充3-外键与 innodb外键自动加索引 插入或更新数据时, 先使用SELECT…LOCK IN SHARE MODE方式,

    86400

    Mysql专题:InnoDB概述

    一 概述 InnoDB与MyISAM有两处不同: 1)InnoDB支持事务; 2)默认采用行(也可以支持) 对于更新操作(UPDATE、INSERT、DELETE),InnoDB会自动给涉及到的数据集加排他...另外,为了允许行共存,InnoDB还有两张内部使用的意向,都是: 意向共享(IS):事务打算给数据行加行共享,事务在给一个数据行加共享前先必须取得该的意向共享; 意向排他(...InnoDB的这种特性意味着:只有通过索引条件检索数据,InnoDB才使用行;否则InnoDB将使用。...1)非索引字段加锁变成 20-9 InnoDB存储引擎的在不使用索引时使用例子 注意,对于没有加索引,线程A仅要求获取id=1的记录的独占,但是因为没有加索引,所以该语句锁住了整个...Mysql的恢复记录(复制实际就是在Slave Mysql不断的做基于BINLOG的恢复)有以下特点: 一是MySQL的恢复是SQL语句的,也就是重新执行BINLOG中的SQL语句。

    1.1K20

    MYSQL INNODB压缩

    压缩方法 如果设置了ROW_FORMAT=COMPRESSED,那可以忽略key_block_size设置,这时默认的key_block_size为innodb_page_size值的一半,MYSQL默认设置...压缩状态查询 可通过查询INFORMATION_SCHEMA下相关INNODB压缩,获取压缩的数据状态: INNODB_CMP和INNODB_CMP_RESET:压缩页的数据状态信息; INNODB_CMPMEM...和INNODB_CMPMEM_RESET:innodb_buffer_pool中压缩页的信息; INNODB_CMP_PER_INDEX和INNODB_CMP_PER_INDEX_RESET:MYSQL5.7...= dynamic (Mysql5.7新加) 以下参数可能在未来版本中删除: innodb_file_format innodb_file_format_check innodb_file_format_max...InnoDB未压缩的数据页是16K,根据选项组合值,mysql为每个的.ibd文件使用1kb,2kb,4kb,8kb,16kb页大小,实际的压缩算法并不会受KEY_BLOCK_SIZE值影响,这个值只是决定每个压缩块有多大

    9.4K40

    Mysql-Innodb 总结

    1.全局:(限制 DML , DDL[修改结构])   全局读: Flush tables with read lock     Flush tables 做的是将缓存刷回硬盘,with read...lock 给所有加读,对于大部分 lock,当客户端连接断开的时候,一般会释放。     ...readonly 可能用于从库,不适用于读 2.   :lock tables tableName read/write  /  unlock tables     属于 lock,不是属性...MDL(metadata lock):     1.增删查改时加 MDL 读     2.改结构(DDL)加写   需要注意的是,MDL锁在 Mysql 的实现使用了一把,但是这把会记录两个链表...5. next-key lock 以右值为标准 形成 做开右闭 区间,在innodb中有 suprenum 表示最大值,(x, suprenum] 表示最后一个next-key lock 区间   6.

    55810

    MySQL InnoDB 和事务

    标准行:共享和排它 特殊的:意向 一致性非锁定性读: 指InnoDB存储引擎通过行多版本控制的方式读取当前执行时间数据库中行的数据,如果读取的行正在执行delete或者update...操作,这时读取操作不会去等待行的释放,相反的会去读取行的一个快照数据 在事务隔离级别READ COMMITTED和REPEATABLE READ(默认事务级别)下,InnoDB使用费一致性锁定性,...总是读取最新的一份快照数据,而REPEATABLE READ读取的是事务开始时的快照数据 一致性锁定读: 在某些情况下,用户需要显示的对数据库读取操作进行加锁以保证数据逻辑的一致性,而这要求数据库支持加锁语句,innodb...read-uncommitted) 是 是 是 不可重复读(read-committed) 否 是 是 可重复读(repeatable-read) 否 否 是 串行化(serializable) 否 否 否 参考: 高性能MySQL...第3版 MySQL技术内幕-InnoDB存储引擎 第2版

    81530

    MySQL 中的很差劲吗?

    说到 MyISAM 和 InnoDB 的区别,很多人都知道,区别在于一个是一个是行,那么小伙伴们有没有想过,和行有什么区别?各自又有哪些玩法?今天松哥就来和大家聊聊这个话题。...当多个事务或者多个进程访问同一个资源的时候,为了保证数据的一致性,就需要用到 MySQL 机制,从锁定资源的角度来看,MySQL 中的大致上可以分为三种: (table-level locking...在 MySQL 中,MyISAM 引擎是,而 InnoDB 引擎则支持行,不过需要注意,其实 InnoDB 也支持,只不过默认情况下是行。...2. MySQL有两种模式: 共享读(Table Read Lock)。 独占写(Table Write Lock)。...3.行松哥留到讲 InnoDB 的时候再和大家聊,今天我们就先扯这么多~ 参考资料: 1.https://database.51cto.com/art/201910/604421.htm 2

    97540

    Mysql InnoDB优化建议

    InnoDB存储引擎由于实现了行锁定,虽然在锁定机制的实现方面带来的性能损耗可能比锁定要更高一些,但是在整体并发处理能力方面是要远远优于MyISAM的锁定的。...当系统并发量较高的时候,InnoDB的整体性能和MyISAM相比就会有比较明显的优势了 但是当我们使用不当的时候,可能会让InnoDB的整体性能表现不仅不比MyISAM高,甚至可能会更差 建议:...(1)尽可能让所有的数据检索都通过索引来完成,从而避免InnoDB因为无法通过索引键加锁而升级为锁定 (2)合理设计索引,让InnoDB在索引键上面加锁的时候尽可能准确,尽可能地缩小锁定范围,避免造成不必要的锁定而影响其他...Query的执行 (3)尽可能减少基于范围的数据检索过滤条件,避免因为间隙带来的负面影响而锁定了不该锁定的记录 (4)尽量控制事务的大小,减少锁定的资源量和锁定时间长度 (5)在业务环境允许的情况下...,尽量使用较低级别的事务隔离,以减少MySQL因为实现事务隔离级别所带来的附加成本

    1.4K50

    MySQL-25】万字总结<>——(全局&行)【共享,排他】【间隙,临键】【,元数据,意向

    前言 大家好吖,欢迎来到 YY 滴MySQL系列 ,热烈欢迎!...其典型的使用场景是做全库的逻辑备份,对所有的进行锁定,从而获取一致性视图,保证数据的完整性 逻辑备份前加上 全局 逻辑备份后,解锁 三.行的基本概念&分类(行 = 临键-见隙...,共享与排他互斥) 【2】情况2 不通过索引条件检索数据(InnoDB的行是针对于索引加的),那么InnoDB将对表中的所有记录加锁,此时 就会升级为 演示: 有这么一张,为主键索引...,对应的是所著3和7之间的间隙 向右遍历时最后一个值不满足查询需求时, 临键 退化为间隙 (可理解成多出一个间隙) 四. 的基本概念&分类【,元数据,意向...对于,主要分为以下三类: 元数据 意向 【1】 对于,分为两类: 共享读 (read lock) 独占写 (write lock) 语法: 加锁: locktables

    11510
    领券