日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Mysql 死锁过程及案例详解之元数据锁MetaData Lock

發(fā)布時(shí)間:2024/9/27 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mysql 死锁过程及案例详解之元数据锁MetaData Lock 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Mysql數(shù)據(jù)鎖MetaData Lock

元數(shù)據(jù)鎖MetaData Lock

元數(shù)據(jù)鎖MetaData Locks的主要作用是在執(zhí)行查詢或者發(fā)起事務(wù)時(shí)元數(shù)據(jù)結(jié)構(gòu)受到保護(hù),即不被修改。

MetaData Lock是表級(jí)鎖。

MetaData Lock是排他鎖,當(dāng)該鎖存在時(shí)不能有其它的連接對(duì)表的模式進(jìn)行修改。

關(guān)于元數(shù)據(jù)鎖的最大問題是空閑事務(wù)(因網(wǎng)絡(luò)斷開或者程序Bug而導(dǎo)致的COMMIT/ROLLBACK語句沒有傳給數(shù)據(jù)庫,也沒有釋放線程而導(dǎo)致線上事務(wù)鎖定等待嚴(yán)重、連接數(shù)暴漲的情況)會(huì)阻止DDL語句的執(zhí)行。

示意案例

--Step1 會(huì)話1里查看連接ID SELECT CONNECTION_ID(); /* CONNECTION_ID() 8 */ START TRANSACTION; SELECT *,SLEEP(15) FROM emp WHERE empno=7566;--Step2 會(huì)話2里查看連接ID SELECT CONNECTION_ID(); /* CONNECTION_ID() 9 */OPTIMIZE TABLE emp;--Step3 會(huì)話3里查看查看連接ID SELECT thd_id, conn_id, state, current_statement, last_statement FROM sys.session WHERE conn_id IN (8, 9)thd_id conn_id state current_statement last_statement 49 9 Waiting for table metadata lock OPTIMIZE TABLE emp 48 8 SELECT *,SLEEP(60) FROM emp WHERE empno=7566通過這個(gè)示例我們可以看到有個(gè)會(huì)話1在執(zhí)行有個(gè)持續(xù)的事務(wù),而在第二個(gè)會(huì)話里執(zhí)行了語句 OPTIMIZE TABLE emp(OPTIMIZE TABLE語句本身不會(huì)改變表的結(jié)構(gòu),但是會(huì)觸發(fā)metadata lock),知道會(huì)話1里的事務(wù)提交或者回滾后會(huì)話2才能正常執(zhí)行,即metalock鎖釋放。我們也可以通過系統(tǒng)表(視圖)來查看當(dāng)前metadata lock的情況。--會(huì)話3里執(zhí)行 Connection 3> SELECT * FROM performance_schema.metadata_locks WHERE OBJECT_NAME = 'emp'mysql> SELECT * FROM performance_schema.metadata_locks WHERE OBJECT_NAME = 'emp' \G *************************** 1. row ***************************OBJECT_TYPE: TABLEOBJECT_SCHEMA: ShenLiang2025OBJECT_NAME: empCOLUMN_NAME: NULL OBJECT_INSTANCE_BEGIN: 139887555287408LOCK_TYPE: SHARED_READLOCK_DURATION: TRANSACTIONLOCK_STATUS: GRANTEDSOURCE: sql_parse.cc:5801OWNER_THREAD_ID: 51OWNER_EVENT_ID: 80 *************************** 2. row ***************************OBJECT_TYPE: TABLEOBJECT_SCHEMA: ShenLiang2025OBJECT_NAME: empCOLUMN_NAME: NULL OBJECT_INSTANCE_BEGIN: 139887489260736LOCK_TYPE: SHARED_NO_READ_WRITELOCK_DURATION: TRANSACTIONLOCK_STATUS: PENDINGSOURCE: sql_parse.cc:5801OWNER_THREAD_ID: 52OWNER_EVENT_ID: 13 2 rows in set (0.00 sec)這里可以看到進(jìn)程ID號(hào)是51由于是一個(gè)未完成的事務(wù),所以獲得一個(gè)共享的讀鎖。 而進(jìn)程ID是52的會(huì)話則因?yàn)閳?zhí)行了DDL語句在等待鎖釋放,即狀態(tài)是PENDING。

總結(jié)

以上是生活随笔為你收集整理的Mysql 死锁过程及案例详解之元数据锁MetaData Lock的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。