返回顶部
首页 > 资讯 > 数据库 >mysql的锁机制
  • 766
分享到

mysql的锁机制

2024-04-02 19:04:59 766人浏览 薄情痞子
摘要

锁概述Mysql锁机制的特点: 不同存储引擎支持不同的锁机制。MyISAM和MEMORY存储引擎支持表级锁;BDB存储引擎采用页面锁;InnoDB存储引擎支持行级锁。表级锁:开销小,加锁快,不会出现死锁,锁

概述

Mysql锁机制的特点: 不同存储引擎支持不同的锁机制。

MyISAM和MEMORY存储引擎支持表级锁;
BDB存储引擎采用页面锁;
InnoDB存储引擎支持行级锁。
  • 表级锁:

    开销小,加锁快,不会出现死锁,锁定粒度大,加锁冲突概率最高,并发度最低;
    适用于以查询为主,只有少量按索引条件更新数据的应用,如WEB应用;
  • 行级锁

    开销大,加锁慢,会出现死锁,锁定粒度小,发生锁冲突的概率最低,并发度最高;
    适合于有大量按索引条件并发更新少量不同数据,同时又有并发查询的应用,如一些在线事务处理(OLTP)系统。
  • 页面锁

    开销和加锁时间介于表锁和行锁之间,会出现死锁,锁定粒度介于表锁和行锁之间,并发度一般;

MyISAM表锁

查询表级锁的争用情况

mysql> show status like 'table%';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| Table_locks_immediate | 19 |
| Table_locks_waited | 0 |
+-----------------------+-------+
2 rows in set (0.00 sec)

table_locks_waited的值越大,表级锁的争用情况越严重

表级锁的锁模式

  • 表共享读锁
  • 表共享写锁

MyISAM表读操作,不会阻塞其他用户对同一表的读请求,但会阻塞对同一表的写请求;
MyISAM表的写操作,会阻塞其他用户对同一表的读请求和写请求。
MyISAM表的读操作和写操作之间,以及写操作之间是串行的

如何加表锁

MyISAM表在执行SELECT语句之前,会自动给涉及到的表加读锁,在执行UPDATE、DELETE、INSERT之前,自动给涉及到的表加写锁。

当然也可以显示手动加锁,用来模拟事务操作。

mysql> lock table tbl_name1 read/write;
mysql> lock tables tbl_name1 read [local], tbl_name2 write [local];

mysql> unlock tables;

注意:对表加锁之后,使用该表的别名也是不允许的,需要对别名也进行锁定,如下:

mysql> lock table tbl_name1 as tb1 read;
mysql> select a.id from tbl_name tb1;

MyISAM的并发插入

MyISAM的读写操作是串行的,但一定程度上,也是支持查询和插入的并发进行,但不可以删除和更新。

在MyISAM引擎中有一个系统变量 concurrent_insert ,专门用来控制并发插入的行为,有三种取值:

0-> 不允许并发插入;
1-> 在MyISAM表没有孔洞的前提下,允许在读的同时,另一个进程从尾部插入记录(默认)
2-> 不论有无空洞,都可以在表尾并发插入

整理空间碎片:

mysql> optimize table tbl_name;

MyISAM的锁调度

已经知道,MyISAM存储引擎的读锁和写锁是互斥的,读写操作是串行的,但是,及时读请求先到达等待队列,写请求后到达等待队列,写锁也会插入到读锁之前,因为MySQL认为写操作比读操作重要。

同时,这也是MyISAM表不适合有大量更新和查询操作的原因,因为大量的更新和查询操作会占据锁等待队列,读锁会被长时间等待。

为了解决这个问题,我们有一些参数设置来调节MyISAM的调度行为。

  • 启动low-priority-updates,使得MyISAM 默认基于读请求以优先的权利;

  • 降低更新请求的的优先级

mysql> set LOW_PRIORITY_UPDATES=1

  • 指定INSERT、UPDATE、DELETE语句的LOW_PRIORITY属性,降低该语句的优先级

  • 一种折中的方案:给系统参数max_write_locl_count设置一个合适的值,当表的读操作达到该值之后,MySQL就暂时将写请求的优先级降低。

InnoDB锁

InnoDB与MyISAM的最大不同支出在于:1、支持事务;2、采用了行级锁。

查询InnoDB行锁的争用情况

mysql> show status like 'innodb_row_lock%';
+-------------------------------+-------+
| Variable_name | Value |
+-------------------------------+-------+
| Innodb_row_lock_current_waits | 0 |
| Innodb_row_lock_time | 0 |
| Innodb_row_lock_time_avg | 0 |
| Innodb_row_lock_time_max | 0 |
| Innodb_row_lock_waits | 0 |
+-------------------------------+-------+
5 rows in set (0.00 sec)

Innodb_row_lock_waits和Innodb_row_lock_time_avg的值越大,表级锁的争用情况越严重

InnoDB行锁模式

  • 共享锁(S)

    允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁

  • 排他锁(X)

    允许获得排他锁的事务更新数据,阻止其他事务取得相同数据集的共享读锁和排他写锁

为了行锁表锁共存,实现多粒度锁机制,InnoDB还有两种内部使用的意向锁,这两种意向锁都是表锁
  • 意向共享锁(IS)

    事务在给一个数据行加共享锁之前,必须先取得该表的IS锁

  • 意向排他锁(IX)

    事务在给一个数据行加排他锁之前,必须先取得该表的IX锁

意向锁是InnoDB自动添加的,不需要用户干预

对于UPDATE、DELETE、INSERT语句,InnoDB自动给涉及数据集加排他锁;对于SELECT语句,InnoDB不会加任何锁。




您可能感兴趣的文档:

--结束END--

本文标题: mysql的锁机制

本文链接: https://lsjlt.com/news/44656.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • mysql的锁机制
    锁概述mysql锁机制的特点: 不同存储引擎支持不同的锁机制。MyISAM和MEMORY存储引擎支持表级锁;BDB存储引擎采用页面锁;InnoDB存储引擎支持行级锁。表级锁:开销小,加锁快,不会出现死锁,锁...
    99+
    2024-04-02
  • mysql myisam的锁机制
    首先我们知道MySQL支持多种引擎,并且不同存储引擎有很多不同,最重要的 ...
    99+
    2024-04-02
  • MySQL中的锁机制
    抛砖引玉:多个查询需要在同一时刻进行数据的修改,就会产生并发控制的问题。我们需要如何避免写个问题从而保证我们的数据库数据不会被破坏。 锁的概念 读锁是共享的互相不阻塞的。多个事务在听一时刻可以同时读取同一资源,而相互不干扰。 写锁的排...
    99+
    2023-08-23
    mysql 数据库
  • mysql的锁机制详解
    这段时间一直在学习mysql数据库。项目组一直用的是oracle,所以对mysql的了解也不深。本文主要是对mysql锁的总结。 Mysql的锁主要分为3大类:    表级锁:存储引擎为Myisam。锁住整个表,特点是开销小,加锁快,锁定力...
    99+
    2021-08-13
    mysql的锁机制详解
  • 【MySQL系列】- MYSQL锁机制
    【MySQL系列】- MYSQL锁机制 文章目录 【MySQL系列】- MYSQL锁机制一、表级锁表加读锁表独占锁释放锁 二、行级锁间隙锁(Gap Locks)临键锁(Next-key ...
    99+
    2023-09-20
    mysql 数据库
  • Mysql锁机制之行锁、表锁、死锁的实现
    目录一、Mysql锁是什么?锁有哪些类别?二、行锁和表锁的区别三、InnoDB死锁概念和死锁案例死锁场景一之select for update:死锁场景二之两个update...
    99+
    2024-04-02
  • MySQL的锁机制——记录锁、间隙锁、临键锁
    记录锁(Record Locks) 记录锁锁住的是索引记录,记录锁也叫行锁。如果使用索引作为条件命中了记录,那么就是记录锁,被锁住的记录不能被别的事务插入相同的索引键值,修改和删除。 例如: select * from test_...
    99+
    2023-08-18
    mysql 数据库 java
  • MySQL锁机制详解
    SQL(锁机制)   锁是计算机协调多个进程或线程并发访问某一资源的机制。锁保证数据并发访问的一致性、有效性;锁冲突也是影响数据库并发访问性能的一个重要因素。锁是Mysql在服务器层和存储引擎层的的并发控制。 加锁是消耗资源的,锁的各种操作...
    99+
    2015-10-14
    MySQL锁机制详解 数据库入门 数据库基础教程
  • MySQL的InnoDB锁机制介绍
    这篇文章主要介绍“MySQL的InnoDB锁机制介绍”,在日常操作中,相信很多人在MySQL的InnoDB锁机制介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL的...
    99+
    2024-04-02
  • mysql锁表机制的概述
    这篇文章主要介绍“mysql锁表机制的概述”,在日常操作中,相信很多人在mysql锁表机制的概述问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql锁表机制的概述”的疑惑...
    99+
    2024-04-02
  • MySQL锁机制详解-表锁与行锁
    文章目录 1. 数据库锁理论2. 锁的分类2.1 按数据操作的类型分类2.2 按数据操作的颗粒度分类 3. 表锁的应用3.1 表锁相关命令3.2 给表加表共享读锁3.3 给表加表独占写锁...
    99+
    2023-09-11
    mysql 数据库
  • MySQL的锁机制之全局锁和表锁的实现
    前言 对mysql锁的总结学习,本文将围绕,加锁的概念,加锁的应用场景和优化,以及不加锁会导致的问题这些方向进行总结学习。mysql的全局锁和表锁是本文的重点 一、全局锁 全局锁的介绍以及使用 全局锁就是对整个数据库实例...
    99+
    2023-01-15
    MySQL全局锁和表锁 MySQL全局锁 MySQL表锁
  • 什么是MySQL锁机制
    本篇内容主要讲解“什么是MySQL锁机制”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“什么是MySQL锁机制”吧!无论什么时候,只要存在多个连接在同一时刻修改数...
    99+
    2024-04-02
  • mysql锁机制怎么用
    mysql 锁机制用于控制对数据的并发访问,保证数据完整性。常见的锁类型包括:表锁:锁定整个表。行锁:锁定特定数据行。间隙锁:锁定指定范围的潜在行。使用 mysql 锁需使用 lock ...
    99+
    2024-06-02
    mysql 并发访问
  • mysql数据库中的锁机制
    这篇文章将为大家详细讲解有关mysql数据库中的锁机制,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Mysql的锁主要分为3大类:表级锁:存储引擎为Myisam。锁住整个...
    99+
    2024-04-02
  • MySQL的锁机制原理介绍
    这篇文章主要讲解了“MySQL的锁机制原理介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL的锁机制原理介绍”吧! M...
    99+
    2024-04-02
  • mysql的锁机制基本原理
    本篇内容介绍了“mysql的锁机制基本原理”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!今天没事就学习一下...
    99+
    2024-04-02
  • 如何理解mysql的锁机制
    本篇文章为大家展示了如何理解mysql的锁机制,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 锁0.1 锁机制当前MySQL已经支持 ISAM, MyIS...
    99+
    2024-04-02
  • MySQL锁机制的示例分析
    这篇文章主要介绍了MySQL锁机制的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。锁在MySQL中是非常重要的一部分,锁对MySQL...
    99+
    2024-04-02
  • MySQL锁机制的详细分析
    这篇文章主要介绍MySQL锁机制的详细分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!文章目录锁锁分类共享锁(读锁,读写互斥,读读互不影响)排他锁(写锁,独占锁)共享锁和排他锁的区...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作