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

MySQL并發控制

數據庫 MySQL
并發即指在同一時刻,多個操作并行執行。MySQL對并發的處理主要應用了兩種機制——是“鎖”和“多版本控制”。

[[200618]]

并發即指在同一時刻,多個操作并行執行。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. 讀取記錄行的過期版本號必須晚于當前事務的版本號。也就是說,當前事務開始的時候,這條記錄還沒有過期。在事務開始之前就已經過期的數據行,該事務也不會看到。

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

MVCC只在READ COMMITTED和REPEATABLE READ這兩個級別下工作。 

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2021-07-19 09:25:19

數據庫MySQL技術

2024-06-17 08:40:16

2009-09-24 14:43:53

Hibernate樂觀

2022-12-12 09:07:06

Redis并發限流

2018-03-22 18:30:22

數據庫MySQL并發控制

2018-08-20 16:00:23

MySQL并發控制MVCC

2011-08-17 10:11:34

MySQL數據庫MVCC

2024-04-30 10:29:46

前端開發h5開發函數

2019-07-24 11:30:54

程序員技能開發者

2021-06-29 23:40:19

Golang語言并發

2021-04-07 06:00:18

JavaScript 前端并發控制

2021-01-12 10:22:45

JavaScript并發控制前端

2010-11-08 10:57:05

SQL Server的

2025-05-19 08:05:00

數據庫MVCCMySQL

2023-01-30 15:41:10

Channel控制并發

2017-11-06 17:16:55

Linux設備驅動并發控制

2024-08-26 13:23:26

2017-02-28 17:46:15

Linux驅動技術并發控制

2009-02-09 10:06:03

并發控制Web應用悲觀鎖

2020-08-10 08:05:24

OracleMySQLDB2
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本视频一区二区三区 | 亚洲在线一区 | 米奇狠狠鲁| 性生活毛片 | 99久久精品免费看国产免费软件 | 久久久免费精品 | 天天亚洲 | 国内在线视频 | 色综合久久天天综合网 | 精品96久久久久久中文字幕无 | 国产精品一区二区av | 日韩有码在线播放 | 99久久99| 久久这里只有精品首页 | 五月综合激情在线 | 国产一区二区精品在线 | 亚洲欧洲在线看 | 天天躁日日躁aaaa视频 | 一级欧美黄色片 | 成人精品一区二区 | 成人一区二区在线 | 国产精品久久久久久久久久久久冷 | 久久av网站 | 天堂成人国产精品一区 | 98成人网| 福利视频一区二区 | 日韩免费网站 | 欧美一级黄色片免费观看 | 成人福利在线视频 | www.亚洲一区 | 一级黄色影片在线观看 | 九色av | 国产精品一区一区 | 国产视频中文字幕在线观看 | 日韩免费高清视频 | 夜夜夜夜草| 99热成人在线 | 精品乱码一区二区三四区视频 | 一级大片免费 | 中文字幕一区二区三区日韩精品 | 一区二区在线 |