成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

美團一面:能不能通俗的解釋下為什么要有意向鎖這個東西?

數據庫 MySQL
在意向鎖存在的情況下,事務 A 如果想申請行級讀鎖,就必須先申請該表的意向讀鎖,申請成功后才能繼續申請某行記錄的行級讀鎖。

眾所周知,InnoDB 中既有讀鎖也有寫鎖,也稱為共享鎖和排他鎖,這兩種鎖既可以加在整張表上,也可以加在行上。

MySQL 自身就提供了表鎖的能力:

  • 讀鎖:LOCK TABLE table_name READ 用讀鎖鎖表,會阻塞其他事務的寫操作
  • 寫鎖:LOCK TABLE table_name WRITE 用寫鎖鎖表,會阻塞其他事務的讀和寫操作

行鎖是 InnoDB 存儲引擎提供的,MySQL 本身并不提供行級鎖的能力:

  • 讀鎖,如SELECT * FROM table_name WHERE ... LOCK IN SHARE MODE 加行級讀鎖,會阻塞其他事務對該行記錄的寫操作
  • 寫鎖,如SELECT * FROM table_name WHERE ... FOR UPDATE 加行級寫鎖,會阻塞其他事務對該行記錄的的讀和寫操作

又有表鎖又有行鎖,我們來考慮下這兩種類型的鎖共存的問題。看下面這個例子:

事務 A 加了行級讀鎖,鎖住了表中的一行,讓這一行只能讀,不能寫。

之后,事務 B 嘗試申請整個表的寫鎖。

圖片

如果事務 B 申請成功,那么理論上它就能修改表中的任意一行,這與 A 持有的行級讀鎖是沖突的。

數據庫需要避免這種沖突,就勢必要讓 B 的申請被阻塞,直到 A 釋放行級讀鎖。

那數據庫要怎么判斷這個沖突呢?

  • 步驟 1:判斷表是否已被其他事務用表級鎖鎖住了整張表
  • 步驟 2:判斷表中的每一行是否已被行級鎖鎖住

看起來沒有什么困難的,但請注意步驟 2,判斷表中的每一行,各位,如何判斷?

顯然,需要遍歷!遍歷表中的每一行。

小學生都能想到這樣的判斷方法效率實在太過于低下了。

于是就有了意向鎖!

我們先來看下意向鎖的解釋:

Intention locks are table-level locks that indicate which type of lock (shared or exclusive) a transaction requires later for a row in a table.

意向鎖是一個表級鎖,其作用就是指明接下來的事務將會用到哪種鎖。

有兩種意向鎖:

  • 意向共享鎖/讀鎖(IS Lock):當事務想要獲得一張表中某幾行的讀鎖(行級讀鎖)時,InnoDB 存儲引擎會自動地先獲取該表的意向讀鎖(表級鎖)
  • 意向排他鎖/寫鎖(IX Lock):當事務想要獲得一張表中某幾行的寫鎖(行級寫鎖)時,InnoDB 存儲引擎會自動地先獲取該表的意向寫鎖(表級鎖)

注意這里的自動:申請意向鎖的動作是數據庫完成的,就是說,事務 A 申請一行的行鎖的時候,數據庫會自動先開始申請表的意向鎖,不需要我們程序員使用代碼來申請。

在意向鎖存在的情況下,事務 A 如果想申請行級讀鎖,就必須先申請該表的意向讀鎖,申請成功后才能繼續申請某行記錄的行級讀鎖。

在意向鎖存在的情況下,上面的判斷可以改成:

  • 步驟 1(不變):判斷表是否已被其他事務用表級鎖鎖住了整張表
  • 步驟 2:發現表上有意向讀鎖(說明表中有些行被行級讀鎖鎖住了),意向讀鎖和表級寫鎖互斥,因此,事務 B 申請表的寫鎖會被阻塞。

也就是說原先步驟 2 的遍歷表中每一行的操作,簡化成了判斷下整張表上有無表級意向鎖就行了,效率大幅提升。

圖片

這就是為什么要有意向鎖了。

責任編輯:武曉燕 來源: 飛天小牛肉
相關推薦

2023-07-03 08:15:46

MySQLInnoDB

2022-04-21 10:39:29

InnoDB意向鎖SQL

2022-06-15 09:02:32

JVM線程openJDK

2024-05-15 09:23:45

MySQL排他鎖共享鎖

2024-10-31 08:50:14

2024-04-24 09:02:58

線程池面試鎖升級

2025-03-25 12:00:00

@Value?Spring開發

2023-12-28 17:33:25

意向鎖MySQL開發者

2022-11-28 14:27:17

插入意向鎖age

2024-04-01 00:00:00

Redis緩存服務消息隊列

2024-04-22 00:00:00

CASCPU硬件

2023-07-13 09:16:47

循環隊列指針front?

2022-01-04 22:11:43

磁盤Redolog持久化

2024-11-26 08:52:34

SQL優化Kafka

2011-08-09 16:08:53

數據庫連接

2025-06-05 03:10:00

mmapmalloc共享內存

2024-08-27 09:05:45

2025-06-04 02:55:00

MySQL意向鎖記錄鎖

2024-06-06 09:03:37

MySQL數據庫共享鎖

2024-05-27 11:35:40

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久99精品久久久久蜜桃tv | 免费一区在线 | 中文字幕一区二区三区精彩视频 | 久久久久久久久久久久久久久久久久久久 | 欧美在线一区二区三区 | 日韩精品久久一区二区三区 | 亚洲 精品 综合 精品 自拍 | 免费在线看黄视频 | 国产精品一区久久久久 | 亚洲天堂精品一区 | www.免费看片.com | 日本精品一区二区 | 日韩 欧美 二区 | 久草资源在线视频 | 精品一二区 | 一级黄在线观看 | 日本三级做a全过程在线观看 | 日韩精品免费一区 | 久久久成人一区二区免费影院 | 亚洲一区二区在线播放 | 狠狠色网 | 在线观看日本高清二区 | 国产午夜精品久久久 | 国产一区二区在线播放 | 免费视频二区 | 免费三级网站 | 日韩欧美一区二区三区四区 | 亚洲免费在线观看视频 | 免费精品 | 午夜寂寞影院列表 | 亚洲精品久久久一区二区三区 | 成人av播放 | 亚洲天堂免费在线 | 亚洲精品日韩视频 | 91久久综合 | 国产精品成人久久久久 | 亚洲毛片 | 成年免费大片黄在线观看岛国 | 国产精品久久久乱弄 | 韩日精品一区 | 久久成人av |