MySQL数据库锁机制之MyISAM引擎表锁和InnoDB行锁详解

保姆级教程:用Qlib和LightGBM从零搭建你的第一个AI量化选股策略(附完整代码) 本文提供了一份详细的教程,教你如何使用Qlib和LightGBM从零搭建AI量化选股策略。教程涵盖了环境配置、数据获取、特征工程、模型训练和策略回测等关键步骤,并附有完整代码和常见问题解决方案,适合量化投资初学者快速上手。 阅读详情

有此可以看出此时,mysql使用的是行索引。

但是还有一个需要我们注意

MySQL中的锁概念

Mysql中不同的存储引擎支持不同的锁机制。比如MyISAM和MEMORY存储引擎采用的表级锁,BDB采用的是页面锁,也支持表级锁,InnoDB存储引擎既支持行级锁,也支持表级锁,默认情况下采用行级锁。

Mysql3中锁特性如下:

表级锁:开销小,加锁块;不会出现死锁,锁定粒度大,发生锁冲突的概率最高,并发度最低。

行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发性也最高。

页面锁:开销和加锁界于表锁和行锁之间,会出现死锁;锁定粒度界与表锁和行锁之间,并发一般。

MyISAM表索

1.查询表级锁争用情况

通过检查table_locks_waited和table_locks_immediate状态变量分析系统上表锁争夺情况

13467292-303665b6fe273043.png

table_locks_waited锁定等待时间越长,则说明存在较严重的表级别锁争用情况。

2.锁模式

mysql的表锁有两种模式:表共享读锁(table read lock)和表独占写锁(table write lock)

13467292-fd73b80530efed4d.png

说明 1.myISAM表的读操作,不会阻塞其他用户对同一个表的读请求,但会阻塞对同一个表的写请求。

 2.myISAM表的写操作,会阻塞其他用户对同一个表的读和写操作。

        3.myISAM表的读、写操作之间、以及写操作之间是串行的。

实例如下,打开了两个会话,当t3处于读锁定时候,会话二可以检索t3数据。当t3处于写锁定时候,会话二只有等到解锁后,才能显示数据(可以对比检索时间)。

13467292-f9e7750fe850fef0.png

3.加表锁

MyISAM在执行查询前,会自动执行表的加锁、解锁操作,一般情况下不需要用户手动加、解锁,但是有的时候也需要显示加锁。

比如:检索某一个时刻t1,t2表中数据数量。

常用代码如下:

select count(t1.id1) as 'sum' from t1;

select count(t2.id1) as 'sum' from t2;

其实这是不正确的,很有可能当你在检索t1的那个时间点,t2的数据已经发生了变化,也就是说你检查出的t1和t2数据结果不是在同一个时间点上。

正确的做法是:

locktablet1read, t2read;

selectcount(t1.id1)as'sum'fromt1;

selectcount(t2.id1)as'sum'fromt2;

unlocktables;

当然也可使用union,这样写:

SELECT

COUNT(t1.`id1`)ASdadasum,'t1'AStablename

FROM

  t1

UNION

ALL

SELECT

COUNT(t2.`id1`)ASdadasum ,'t2'AStablename

FROM

  t2 ;

注意事项

1.在锁定表时候,如果加上关键字local,满足myISAM表的并发插入问题。eg: lock table t3 read local;

2.使用locak tables 给表加锁时候,必须同时给所有涉及到的表加锁,因为加锁之后,当前会话,就不能操作没有加锁的表。

4.并发插入问题

myISAM存储引擎有一个系统变量,concurrent_insert,专门用来控制并发插入行为的,值可以为0,1,2.

concurrent_insert为0时候,不允许插入

concurrent_insert为1时候,如果mysql没有空洞(中间没有被删除的行),myISAM运行一个进程读表的时候,另一个进程从表尾插入记录,这也是mysql默认设置。

concurrent_insert为2时候,无论MyISAM表中有没有空洞,都允许在表尾并行的插入。

5.myISAM锁调度问题

MyISAM存储引擎的读锁和写锁是互斥的,读写操作室串行的,那么如果读写两个进程同时请求同一张表,Mysql将会使写进程先获得锁。不仅仅如此,即使读请求先到达锁等待队列,写锁后到达,写锁也会先执行。因为mysql因为写请求比读请求更加重要。这也正是MyISAM不适合含有大量更新操作和查询操作应用的原因。

调节办法:

1)通过指定启动参数low-priority-updates,使MyISAM引擎默认给与读请求优先的权限

2)通过执行set low_PRIORITY_UPDATES=1,降低更新请求的优先级。

3)指定INSERT、UPDATE、DELETE语句的LOW_PRIORITY属性。

InnoDB锁

1.InnoDB与MyISAM最大不同有两点:

 1).支持事务

 2).采用行级锁

2.查看InnoDB行锁争用情况

13467292-54455a522e90e6fd.png

3.innodb行锁模式以及加锁方法

innoDB实现了以先两种类型的行锁:

共享锁(S):允许一个事务去读一行,阻止其他事务获取相同数据集的排他锁。

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

先两种意向表锁:

意向同享锁

意向排他锁

13467292-bbb7afd96c1ecbee.png

如果一个事务请求的锁模式与当前的锁模式兼容,innodb就将请求的锁授予该事务;反之,如果两者不兼容,该事务就要等待锁释放。意向锁是Innodb自动加的,不需要用户干预。对于UPDATE、DELETE、INSERT语句,Innodb会自动给涉及的数据集加排他锁(X);对于普通SELECT语句,Innodb不会加任何锁。

显示添加锁

共享锁(S) : SELECT * FROM table_name WHERE .... LOCK IN SHARE MODE

排他锁(X):  SELECT * FROMtable_name WHERE .... FOR UPDATE.

使用select ... in share mode获取共享锁,主要用在需要数据依存关系时,确认某行记录是否存在,并确保没有人对这个记录进行update或者delete。

4.InnoDB行锁实现方式

InnoDB行锁是通过给索引上的索引项加锁来实现的,这一点MySQL与Oracle不同,后者是通过再数据块中,对相应数据行加锁来实现的。InnoDB这种行锁实现特点意味着:只有通过索引条件检索数据,innoDB才使用行级锁,否则InnoDB将使用表锁,在实际开发中应当注意。

实例一:

建立t1表如下:

CREATE

TABLE`t1`(

`id1`int(5)DEFAULTNULL,

`id2`int(3)unsignedzerofillNOTNULLDEFAULT'000'

)ENGINE=InnoDBDEFAULTCHARSET=utf8

insertintot1 valuses(1,1),(2,2);

13467292-136d68e028d25db1.png

因为没有创建索引,当给第一个会话添加索引时候,其实添加的是表索引,而非行索引,因为第二会话在查询其他信息时候,一直处于等待状态,最后超时,直到第一个会话事务提交后,方可查询。(需要先设置 set autocommit=0)

实例二:

修改上面t1表中数据,数据如下

13467292-3462fd68426073c1.png

给id1添加索引ALTER TABLE t1 ADD INDEX id1(id1);

13467292-ff7ac3c93bf72445.png

有此可以看出此时,mysql使用的是行索引。

但是还有一个需要我们注意很明显两个会话查询的不是同一行记录,为什么会话2仍然需要等待会话1提交之后才能查询呢?还是因为Mysql行锁是针对索引加的锁,不是针对记录加的锁,索引虽然访问不同的记录,但是他们的索引相同,是会出现冲突的,在设计数据库时候需要注意这一点。上面只有将字段id2,也添加上索引才能解决冲突问题。这也是mysql效率低的一个原因。

参考:《MySQL数据库开发、优化与管理维护》

Java高架构师、分布式架构、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战学习架构师视频免费学习加群:835638062 点击链接加入群聊【Java高级架构】:https://jq.qq.com/?_wv=1027&k=5S3kL3v

ISP算法:宽动态HDR 动态范围(Dynamic Range):在很多领域来表示某个变量的最大值和最小值的比值。在数字图像处理领域里,动态范围也被称为图像对比度,表示图像可以显示范围内,像素最大亮度值和最小亮度值的比值。 高动态范围图像(High Dynamic Range Image): 可以反映真实场景中高动态范围亮度信息图像。 高动态技术:能自动调整图像动态范围的一种技术。该技术是一种利用计算机高速运算产生高 阅读详情

相关推荐

双传声器法测量吸声材料的吸声系数(公式推导与解释)

在双传声器法中,通过测量两个位置的声压 p1和 p2​,可以分离出入射波和反射波的声压分量。双传声器法一般在阻抗管中进行,阻抗管的一端为平面波声源,另一端放置待测材料。两个传声器放置在靠近材料的阻抗管内,用于测量管道内的声压。双传声器法是一种常用于测量材料吸声系数的实验方法,通过在管道内使用两个传声器测量声波的入射和反射,来计算出材料的吸声系数。当测试样品较少时,测试时,需要交换两个传声器的位置,目的是为了相位校准。

m0_57407372的博客 1876

MySQL锁汇总,一文搞懂InnoDB所有的锁

锁住的不是record一行记录,也不是column字段,那么InnoDB的行锁锁住的到底是什么呢?在上面三个案例中,我们分析一下它们的差异在哪里,这三张表结构的什么区别导致了加锁行为的差异?答案就是索引。InnoDB的行锁,就是通过锁住索引来实现的。我们准备一张测试表t2,表中有一个主键索引,有四条数据,主键id分别是1、4、7、10。因为我们用主键索引加锁,我们这里的划分标准就是主键索引的值。这些数据库里面存在的主键值,我们把它叫做Record,记录,那么我们这里就有4个Record。

秃了也弱了 2813

基于STM32与MPU6050的实时姿态检测系统设计与实现(源码+硬件解析)

本文详细介绍了基于STM32单片机与MPU6050传感器的实时姿态检测系统设计与实现。通过硬件解析、传感器校准、卡尔曼滤波算法和欧拉角计算,实现高精度姿态检测。提供完整源码和调试技巧,适用于无人机、平衡车等嵌入式开发项目,解决噪声干扰和数据漂移等常见问题。

jupi8的博客 497

MySQL:MyISAM锁

MySQL:MyISAM锁 1.简介 MyISAM只支持表级锁。 MyISAM在执行查询(SELECT)前,会自动给涉及的所有表加读,在执行(UPDATE、DELETE、INSERT等)前,会自动给涉及的表加写锁。 服务器锁状态 Table_locks_immediate:立即授予表锁请求的次数。 Table_locks_waited:无法立即授予表锁请求且需要等待的次数。 # 查看锁状态信息 show status like 'table_locks%'; 常用命令 # 锁定写 lock tables

yimtcode 926

解决win11无法安装.net framework 3.5(包括.net2.0和3.0)错误代码:0x80070005

解决win11无法安装.net framework 3.5(包括.net2.0和3.0)错误代码:0x80070005

zeng699304的博客 2万+

变压器铁心100Hz振动噪声的COMSOL磁致伸缩仿真全流程

磁致伸缩是铁磁材料在磁场作用下发生尺寸变化的现象,也是变压器铁心振动与噪声产生的根本原因。由于应变与磁通密度近似成平方关系,50Hz电网激励下铁心振动基频为100Hz。借助COMSOL多物理场仿真,可将磁场计算结果映射为结构应力和变形,完成“电磁—结构”单向耦合分析。该技术广泛应用于变压器振动噪声预测、结构优化及故障诊断等工程场景。本文从磁致伸缩物理机理出发,系统梳理了材料参数、等效建模、边界条件设置和结果校核等关键步骤,帮助工程师掌握从磁致伸缩到结构变形的完整仿真链路,解决实际工程对标难题。

weixin_33796177的博客 314

MYSQL中Innodb表锁详解

意向锁的并发性:意向锁不会与行锁的共享/排它锁互斥,正因为如此,意向锁并不会影响到多个事务对不同数据行加排它锁时的并发性(不然直接用普通的表锁就行了)注:意向锁是有存储引擎自己的维护的,用户无法手动操作意向锁,在为数据行加共享/排它锁之前,Innodb会先获取该数据行所载数据表对应的意向锁。表级别的S锁、X锁:在对某个表执行增删改查语句的时候,Innodb存储引擎不会为这个表添加表级别的。3、IX、IS是表级锁,不会和行级的X,S锁发生冲突,只会和表级的X,S发生冲突。表锁(Table Lock)

qq_41473691的博客 2556

Unity面试题总结

Unity面试题

sinat_34014668的博客 1万+

MySQL——MyISAM 表锁,【MySQL

很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。最后祝愿各位身体健康,顺利拿到心仪的offer!由于文章的篇幅有限,所以这次的蚂蚁金服和京东面试题答案整理在了PDF文档里一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

2401_84104809的博客 1452

HX720数据采集实战:从硬件连接到姿态解析(含避坑指南)

本文详细介绍了HX720高精度ADC芯片在数据采集与姿态解析项目中的实战应用。内容涵盖从硬件电路设计、驱动源码编写与优化,到原始数据处理、校准以及最终姿态角度计算的完整流程,并提供了关键的避坑指南和调试技巧,帮助开发者高效完成从传感器信号到可用姿态数据的转换。

i8j9k0l1的博客 489

OCR技术解析:用Tesseract和PaddleOCR识别文本

OCR技术解析:用Tesseract和PaddleOCR识别文本 ,人工智能,计算机视觉,大模型,AI,光学字符识别(Optical Character Recognition,简称 OCR)是一项将图片、扫描件等文档中的文字信息转换为可编辑文本的技术。在数字化时代,OCR 技术广泛应用于文档处理、车牌识别、身份证识别、古籍数字化等领域,极大地提高了文字信息处理的效率。Tesseract 和 PaddleOCR 是两款极具代表性的 OCR 工具。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 3万+

mysql myisam 行锁_MySQL数据库锁机制之MyISAM引擎表锁和InnoDB行锁详解

MySQL中的锁概念Mysql中不同的存储引擎支持不同的锁机制。比如MyISAM和MEMORY存储引擎采用的表级锁,BDB采用的是页面锁,也支持表级锁,InnoDB存储引擎既支持行级锁,也支持表级锁,默认情况下采用行级锁。Mysql3中锁特性如下:表级锁:开销小,加锁块;不会出现死锁,锁定粒度大,发生锁冲突的概率最高,并发度最低。行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最...

weixin_39615402的博客 263

【局部规划模块轨迹优化算法】Teb_planner规划算法

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对****做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容由于ROS中的局部路径规划器比较老了,所以我推荐大家使用比较新的局部路径规划器teb_local_planner。teb_local_planner是基于弹性时间带碰撞约束的算法,算法将动态障碍物、运行时效、路径平滑性等约束做综合考虑,在复杂环境下有更优秀的表现。

qq_35635374的博客 953

mysql表索和行索_MySQL数据库锁机制之MyISAM引擎表锁和InnoDB行锁详解

MySQL中的锁概念MySQL中不同的存储引擎支持不同的锁机制。比如MyISAM和MEMORY存储引擎采用的表级锁,BDB采用的是页面锁,也支持表级锁,InnoDB存储引擎既支持行级锁,也支持表级锁,默认情况下采用行级锁。Mysql3中锁特性如下:表级锁:开销小,加锁块;不会出现死锁,锁定粒度大,发生锁冲突的概率最高,并发度最低。行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最...

weixin_42244017的博客 264

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

mysql的表索和行索_MySQL数据库锁机制之MyISAM引擎表锁和InnoDB行锁详解

MySQL中的锁概念Mysql中不同的存储引擎支持不同的锁机制。比如MyISAM和MEMORY存储引擎采用的表级锁,BDB采用的是页面锁,也支持表级锁,InnoDB存储引擎既支持行级锁,也支持表级锁,默认情况下采用行级锁。Mysql3中锁特性如下:表级锁:开销小,加锁块;不会出现死锁,锁定粒度大,发生锁冲突的概率最高,并发度最低。行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最...

weixin_39528559的博客 265

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

mysql数据库锁关键字_MySQL数据库锁机制之MyISAM引擎表锁和InnoDB行锁详解

有此可以看出此时,mysql使用的是行索引。但是还有一个需要我们注意MySQL中的锁概念Mysql中不同的存储引擎支持不同的锁机制。比如MyISAM和MEMORY存储引擎采用的表级锁,BDB采用的是页面锁,也支持表级锁,InnoDB存储引擎既支持行级锁,也支持表级锁,默认情况下采用行级锁。Mysql3中锁特性如下:表级锁:开销小,加锁块;不会出现死锁,锁定粒度大,发生锁冲突的概率最高,并发度最低。...

weixin_39762441的博客 237

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

MySQL数据库锁机制之MyISAM引擎表锁和InnoDB行锁详解 作者:hsd2012

MySQL中的锁概念 Mysql中不同的存储引擎支持不同的锁机制。比如MyISAM和MEMORY存储引擎采用的表级锁,BDB采用的是页面锁,也支持表级锁,InnoDB存储引擎既支持行级锁,也支持表级锁,默认情况下采用行级锁。 Mysql3中锁特性如下: 表级锁:开销小,加锁块;不会出现死锁,锁定粒度大,发生锁冲突的概率最高,并发度最低。 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发

zxc456733的博客 434

MySQL锁机制详解-表锁与行锁

锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算机资源,如CPU、RAM、I/O等的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题。此外,锁冲突也是影响数据库并发访问性能的一个重要因素。

huangjhai的博客 1万+

MySQL 表锁和行锁机制(很详细)

MySQL 表锁和行锁机制 行锁变表锁,是福还是坑?如果你不清楚MySQL加锁的原理,你会被它整的很惨!不知坑在何方?没事,我来给你们标记几个坑。遇到了可别乱踩。通过本章内容,带你学习MySQL的行锁,表锁,两种锁的优缺点,行锁变表锁的原因,以及开发中需要注意的事项。还在等啥?经验等你来拿! MySQL的存储引擎是从MyISAM到InnoDB,锁从表锁到行锁。后者的出现从某种程度上是弥补前者的...

kuyuyingzi的专栏 2万+

MySQL中的锁(表锁、行锁,共享锁,排它锁,间隙锁)

本文参考: http://mysqlpub.com/thread-5383-1-1.html http://blog.youkuaiyun.com/c466254931/article/details/53463596 有很多是转载合并过来。锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的 计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。如何保证

程序老兵的博客 4万+
上一篇: 网易云音乐数据交互—async&await实现版
下一篇: 我们不得不面对的中年职场危机
普通网友
博客等级 码龄8年 55粉丝 197原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值