91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL中怎么實現并發控制

發布時間:2021-07-29 17:01:29 來源:億速云 閱讀:190 作者:Leah 欄目:數據庫

今天就跟大家聊聊有關MySQL中怎么實現并發控制,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

鎖分為讀鎖和寫鎖兩種,也稱作共享鎖和排他鎖。

因為多個讀操作同時進行是不會破壞數據的,所以讀鎖是共享的,多個讀操作可以同時進行,互不干擾。

為了防止多個寫操作共同執行破壞數據,寫鎖是排他的,一個寫鎖會阻塞其它的寫鎖和讀鎖,進而保證同一資源在任何時刻只有一個寫操作在執行,并防止其它用戶讀取正在寫入的該資源。

在鎖粒度方面,MySQL包括表鎖和行鎖兩種類型。鎖的粒度越小,越有利于對數據庫操作的并發執行。但是管理鎖消耗的資源也會更多。如果系統花費大量的時間來管理鎖,而不是存儲數據,那么系統的性能也會受到影響。

表鎖會鎖定整張表,它是開銷最小的策略。諸如ALTER TABLE之類的語句會使用表鎖。

行鎖***程度的支持并發操作,同時也帶來了***的開銷。InnoDB實現了行鎖。

在MySql中并不只是用鎖來維護并發控制。

事務的隔離級別

事務的概念在此不多介紹。我覺得,也可以將事務看成是并發中的一部分——事務包含了一組操作,事務和事務之間可以并行執行。事務和事務之間的并發也和普通的并發操作一樣會共享相同的資源,這樣并發執行的事務之間就會相互影響。根據事務之間影響程度的不同,提出了事務的隔離級別這個概念,分別是READ  UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE。

READ UNCOMMITTED就是一個事務對共享數據的修改馬上就能夠被另一個事務感知到,其實也就是沒有對修改操作做任何特殊處理。

SERIALIZABLE是通過加鎖的方式強制事務串行執行,這樣可以避免幻讀。但這種方式會帶來大量鎖爭用問題。

READ COMMITTED和REPEATABLE READ是基于MVCC的方式實現的。

MVCC多版本并發控制

MySql對于事務之間并發控制的實現并不是簡單的使用行級鎖。MySql在讀操作時并不加鎖,只有在寫操作時才會對修改的資源加鎖。

MVCC保存了數據資源在不同時間點上的多個快照。根據事務開始的時間不同,每個事務看到的數據快照版本是不一樣的。

InnoDB中的MVCC實現:存儲引擎全局維護了一個系統版本號,每開啟一個新的事務,這個系統版本號就會遞增。事務開始時刻的系統版本號,會作為這個事務本身的版本號。在每行記錄中,存儲引擎又在每行的后面保存兩個隱藏的列,分別保存這一行的開始版本號和過期版本號。在REPEATABLE  READ隔離級別下,MVCC的具體操作如下:

  • INSERT

存儲引擎為新插入的每一行保存當前的系統版本號作為這一行的開始版本號。

  • UPDATE

存儲引擎會新插入一行記錄,當前的系統版本號就是新記錄行的開始版本號。同時會將原來行的過期版本號設為當前的系統版本號。

  • DELETE

存儲引擎將刪除的記錄行的過期版本號設置為當前的系統版本號。

  • SELECT

當讀取記錄時,存儲引擎會選取滿足下面兩個條件的行作為讀取結果。

1. 讀取記錄行的開始版本號必須早于當前事務的版本號。也就是說,在當前事務開始之前,這條記錄已經存在。在事務開始之后才插入的行,事務不會看到。

2. 讀取記錄行的過期版本號必須晚于當前事務的版本號。也就是說,當前事務開始的時候,這條記錄還沒有過期。在事務開始之前就已經過期的數據行,該事務也不會看到。

通過上面的描述,可以看到在存儲引擎中,同一時刻存儲了一個數據行的多個版本。每個事務會根據自己的版本號和每個數據行的開始及過期版本號選擇讀取合適的數據行。

看完上述內容,你們對MySQL中怎么實現并發控制有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

红安县| 平塘县| 张家港市| 酒泉市| 乐陵市| 武穴市| 石城县| 余江县| 秦安县| 都江堰市| 蕲春县| 大同市| 互助| 洱源县| 永丰县| 九龙城区| 郓城县| 龙胜| 万安县| 荥阳市| 南木林县| 珲春市| 左贡县| 朝阳区| 临汾市| 济阳县| 永安市| 汝南县| 顺昌县| 海晏县| 新宾| 岳池县| 郴州市| 仪征市| 洪洞县| 报价| 仁化县| 金秀| 通江县| 清徐县| 资源县|