mysql数据库锁MDL锁的解释

mysql数据库锁MDL锁的解释,第1张

在我们系统中有一张表它的查询概率非常高。 最近有个需求,需要对这个表增加一个字段 ,然而在增加字段的时候发现系统中有多个业务出现了超时 *** 作,那么这个是什么原因导致的呢?经过查阅资料发现是数据库的 MDL锁+事务导致 的。

MDL锁属于表级别的元数据锁。 表级别锁分为数据锁和元数据锁,通常我们说的加锁一般指的是加的数据锁。跟数据锁一样,元数据锁也分读锁和读写锁。

MDL不需要显示使用,在进行表 *** 作时会自动加上 。当对表进行增删改查时,会自动加上MDL读锁;当要对表进行加减字段的结构修改时,会自动加上MDL写锁。

MDL锁的存在,其实是为了保证数据的一致性。 想象一下,假如没有MDL锁,一个查询在遍历表数据的过程中,另外一个线程执行了ALTER TABLE t DELETE COLUMN 'col_1'把col_1这一列删掉了,那查询结果就乱了,结果中是否应该有这一列数据?

:表示正常往下执行

:表示卡住了,即无法往下执行。

解释:

步骤 1 2 正常执行。执行步骤2 时,会申请表customer的MDL的 SHARED_READ 锁。

步骤3 会卡住, 因为此时会申请表customer的MDL的EXCLUSIVE锁,但是事物一的事物没有提交,此时是无法申请到EXCLUSIVE锁,因为它们是互斥的。

步骤4 也会卡住,因为EXCLUSIVE锁和SHARE_READ锁是互斥的, 且EXCLUSIVE锁的优先级更高 ,所以步骤4 也会卡住。

步骤5 事物提交,释放表的SHARE_READ锁,之后就可以执行6 和7 的 *** 作了。

如果先执行事务二,在执行事务三,则是可以成功的,因为alter数据ddl语句,和事物无关。

因此在我们开发的过程中,需要避免大的事务 *** 作,防止占有锁的时间过长。

举例说明MDL 与 S/N 的作用与区别:前者为生产商的产品序列号,后者为产品型号,型号为商业参数,序列号为企业产品管理使用。

1、MDL字符串(条码),表示设备产品型号,如图中 WD3200AAJS。WD为西数产品标志,其后的3200为硬盘容量,即3200 X 100MB = 320GB。后面的字母含义:

① A ,代表硬盘外形尺寸为3.5英寸规格;

② A ,民用级硬盘,鱼子酱系列;

③ J ,表示盘片转速 7200转/分,8MB缓存;

④ S ,支持 SATA 3Gb/s(SATA2)。

2、S/N 为产品序列号,由字母与数字混合组成的字符串,如 WCAV2T609773。S/N序列号也称“产品 ID”,如同身份z的作用,是企业产品管理数据库中,管理产品信息数据的重要识别代码。其含义中包括该产品的生产批号、生产日期、产地、技术规格等信息,当去官网验明产品正身时,是必须提供该代码才能查询。

方法和详细的 *** 作步骤如下:

1、第一步,打开matlab软件,依次单击“新建”-->“脚本”选项,见下图,转到下面的步骤。

2、第二步,完成上述步骤后,输入以下代码,见下图,转到下面的步骤。

3、第三步,完成上述步骤后,单击另存为name.m文件,见下图,转到下面的步骤。

4、第四步,完成上述步骤后,在命令行窗口中输入name文件的名称,然后单击运行以成功输出 *** 作结果,见下图。这样,就解决了这个问题了。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9565170.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存