美文网首页
MySQL表级锁

MySQL表级锁

作者: cbhe | 来源:发表于2020-05-19 20:56 被阅读0次

表级锁的种类

MySQL里面表级别的锁有两种,一种是表锁,另一种是元数据锁(MDL, meta data lock)。

1. 表锁

  • 语法
lock tables TABLE_NAME read/write; 
  • 释放锁的时机
    • 使用显式命令 unlock tables
    • 当加锁的客户端与服务器端断开连接时
  • 需要注意的是 lock tables 除了限制其他线程读写表数据之外,还会限制本线程对表的访问,例如执行lock tables T1 read, T2 write;那么其他线程写T1和读写T2的请求就被阻塞了。但是也同时限制了当前线程只能读T1和读写T2,也不能操作其他表。

2. MDL锁

MDL锁不需要显式添加,在访问一个表的时候会自动给这个表加上MDL锁,以保证查询出的内容与表结构同步。

MDL锁有时候会带来一些麻烦。我们知道,为一个表加字段或者修改字段或者建立索引时会遍历全表,因此对一个大表操作时要格外小心。不过如果对MDL锁理解不到位,对一个小表加字段时也可能会让整个数据库崩溃。例如下面的操作:


图1 加字段造成阻塞

如图一所示,session1开启事务执行查询语句,这时会加上MDL读锁。session2也要加读锁,所以可以正常执行。session3因为要加字段所以需要请求MDL写锁,这时候就会被阻塞,直到session1和session2执行完成。不过session3同样也会阻塞掉所有后面的session对于该表的读写请求,如果阻塞时间太长的话,session4的客户端会重新发送请求重试,如果这样的请求和重试太多的话,很快就会耗尽服务器端的线程,造成数据库崩溃。

相关文章

  • MySQL锁篇

    1 MySQL锁介绍 2 MySQL表级锁 2.1 表级锁介绍 ​ 表级锁由SQL layer实现。M...

  • Mysql 锁详解

    Mysql 锁详解一、前言二、MyISAM2.1 MyISAM表锁2.2 查询表级锁争用情况2.3 MySQL表级...

  • MySQL学习笔记-死锁产生原因和解决方法

    Mysql 锁类型 一、锁类型介绍: MySQL有三种锁的级别:页级、表级、行级。 表级锁:开销小,加锁快;不会出...

  • MySQL死锁产生原因和解决方法

    Mysql 锁类型 一、锁类型介绍: MySQL有三种锁的级别:页级、表级、行级。 表级锁:开销小,加锁快;不会出...

  • Mysql并发时经典常见的死锁原因及解决方法

    1. mysql都有什么锁 MySQL有三种锁的级别:页级、表级、行级。 表级锁:开销小,加锁快;不会出现死锁;锁...

  • Mysql相关的锁

    MySQL行级锁、表级锁、页级锁详细介绍 页级:引擎 BDB。表级:引擎 MyISAM , 理解为锁住整个表,可以...

  • MySQL的锁机制

    锁的类型 MySQL的锁分为:行级锁、表级锁、页级锁 MyISAM 和 Memory 存储引擎使用的是表级锁 In...

  • MySQL 锁之二——表锁

    1、概述 MySQL 表级锁是以单个表为粒度的锁,InnoDB 和 MyISAM 引擎都支持表级锁; 2、表锁分类...

  • MySQL 锁原理通过 6 个死锁案例,让你彻底理解 MySQL

    Mysql 锁类型和加锁分析 MySQL有三种锁的级别:页级、表级、行级。 1、表级锁:开销小,加锁快;不会出现死...

  • MySQL的锁机制

    mysql的锁机制 1、MySQL锁的基本介绍 MyISAM:MySQL的表级锁有两种模式:表共享读锁(Table...

网友评论

      本文标题:MySQL表级锁

      本文链接:https://www.haomeiwen.com/subject/byriohtx.html