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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql x ix_mysql – 为什么IX-lock与InnoDB中的另一个IX-lock兼容?

發布時間:2023/12/18 数据库 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql x ix_mysql – 为什么IX-lock与InnoDB中的另一个IX-lock兼容? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

https://dev.mysql.com/doc/refman/5.6/en/innodb-lock-modes.html說:

Thus, intention locks do not block anything except full table requests (for example, LOCK TABLES … WRITE). The main purpose of IX and IS locks is to show that someone is locking a row, or going to lock a row in the table.

這意味著多個線程可以獲取IX鎖.這些鎖位于表級,而不是行級. IX鎖意味著持有它的線程打算更新表中某處的某些行. IX鎖僅用于阻止全表操作.

如果你認為它是雙向的,它可能會有所幫助 – 如果正在進行全表操作,那么該線程有一個阻止IX鎖的表級鎖.

DML操作必須先獲取IX鎖,然后才能嘗試行級鎖.原因是您不希望在ALTER TABLE正在進行時允許DML,或者其他一些線程已經完成LOCK TABLES … WRITE.

IX鎖定不會阻止UPDATE,DELETE,SELECT..FOR UPDATE等行級更改.它們被其他行級更改或實際的完整表鎖(LOCK TABLES或某些DDL語句)阻止.但是除了那些表操作之外,運行DML的多個線程可能同時工作,只要它們每個都處理一組不重疊的行.

你的評論:

第二個SELECT … FOR UPDATE沒有被阻塞等待IX鎖,它被阻塞等待已經被另一個線程中的X鎖鎖定的行上的X(行級)鎖.

我剛嘗試了這個,然后我運行了SHOW ENGINE INNODB狀態,這樣我就可以看到被阻止的事務:

---TRANSACTION 71568, ACTIVE 12 sec starting index read

mysql tables in use 1, locked 1

LOCK WAIT 2 lock struct(s), heap size 1136, 1 row lock(s)

MySQL thread id 10, OS thread handle 140168480220928, query id 288 localhost root statistics

select * from test where id=1 for update

------- TRX HAS BEEN WAITING 12 SEC FOR THIS LOCK TO BE GRANTED:

RECORD LOCKS space id 802 page no 3 n bits 72 index `PRIMARY` of table `test`.`test`

trx id 71568 lock_mode X locks rec but not gap waiting

看到?它說它正在等待在表測試的主鍵索引上使用lock_mode X授予鎖定.這是一個行級鎖定.

關于LOCK IN SHARE MODE的困惑:

你在談論SELECT的三個層次.

> SELECT請求沒有鎖.沒有鎖阻止它,它不會阻止其他鎖.

> SELECT … LOCK IN SHARE MODE請求表上的IS鎖定,然后S鎖定與索引掃描匹配的行.多個線程可以在表上保存IS鎖或IX鎖.多個線程可以同時保存S鎖.

> SELECT … FOR UPDATE請求表上的IX鎖,然后X鎖定與索引掃描匹配的行. X鎖是獨占的,這意味著它們不能讓任何其他線程在同一行上具有X鎖或S鎖.

但X和S鎖都不關心IX或IS鎖.

想想這個比喻:想象一下博物館.

許多人,包括訪客和策展人,都進入了博物館.參觀者想要觀看繪畫,因此他們佩戴標有“IS”的徽章.策展人可能會更換油畫,因此他們會佩戴一張標有“IX”的徽章.博物館里可以同時有很多人,有兩種類型的徽章.它們不會相互阻擋.

在他們的訪問期間,嚴肅的藝術愛好者將盡可能地接近繪畫,并研究它很長一段時間.在同一幅畫之前,他們很高興讓其他藝術愛好者站在他們旁邊.因此他們正在做SELECT … LOCK IN SHARE MODE并且他們有“S”鎖,因為他們至少不希望在他們研究它時更換它.

策展人可以取代一幅畫,但他們對嚴肅的藝術愛好者很有禮貌,他們會等到這些觀眾完成并繼續前進.所以他們試圖做SELECT … FOR UPDATE(或者只是UPDATE或DELETE).他們此時會獲得“X”鎖,掛上一點點注意“展品被重新設計”.嚴肅的藝術愛好者希望以適當的方式呈現藝術,具有良好的燈光和一些描述性的匾額.他們會等待重新設計在他們接近之前完成(如果他們嘗試,他們會等待鎖定).

此外,你可能已經進入了一個博物館,那里有更多的休閑游客,試圖遠離其他人的方式.他們看著房間中間的畫作,而不是接近太近.他們可以看到其他觀眾正在看的同樣的畫作,他們可以偷看嚴肅藝術愛好者的肩膀,看看那些被觀看的畫作.當他們更換畫作時,他們甚至可能會對策展人嗤之以鼻(如果他們瞥見一幅尚未正確安裝和點亮的畫作,他們也不在乎).因此,這些隨意的訪客不會阻止任何人,也沒有人阻止他們的觀看.他們只是做SELECT而他們不要求任何鎖.

但也有建筑工人應該拆除墻壁和東西,但他們不會工作,而建筑物中有任何人.他們會等待每個人離開,一旦他們開始工作,他們就不會讓任何人進入.這就是IS和IX徽章的存在阻止DDL(建筑工作),反之亦然.

總結

以上是生活随笔為你收集整理的mysql x ix_mysql – 为什么IX-lock与InnoDB中的另一个IX-lock兼容?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。