mysql併發控制的機制

2021-10-04 10:40:21 字數 1664 閱讀 7046

事務的三個問題

1.1 髒讀: 事務a檢視資料,事務b修改資料,導致事務a看到了事務b修改的髒資料,這種現象稱為髒讀。

1.2 不可重複讀(側重與資料行的修改):事務a檢視資料,事務b修改資料並提交了事務,事務a發現資料被修改了,造成了資料的前後不一致的問題。

1.3 幻讀(側重與資料行的增加):事務a發現一張表有5條資料,事務b插入了一條資料,並提交資料,事務a發現表變成了6條資料,就像發生了幻覺一樣。

資料庫事務隔離級別分別解決了什麼問題。

2.1 讀未提交: 三個問題都沒有解決

2.2 讀提交:解決髒讀。

2.3 可重複讀:解決了髒讀、不可重複讀、幻讀。

2.4 序列(加的是表鎖):解決了髒讀、不可重複讀、幻讀。

mysql的處理併發有什麼方案。

3.1 mvcc機制,也稱為多版本併發控制,這個機制完成了讀寫操作不衝突。在mvvc中,讀操作分成了快照讀和當前讀

3.1.1 快照讀:普通的查詢語句,不需要加鎖。從多個快照記錄選擇一條記錄返回。

3.1.1.1 原理:是通過在每行記錄後面儲存兩個隱藏的列來實現的。這兩個列,乙個儲存了行的建立時間,乙個儲存行的過期時間(或刪除時間)。當然儲存的並不是實際的時間值,而是系統版本號(system version number)。每個寫操作都會建立乙個新版本,讀操作從多個版本中選擇乙個返回(一般選擇從時間戳最大的選擇),解決了讀寫衝突的問題,

3.1.2 當前讀:特殊的查詢語句,例如更新,刪除等操作,需要加鎖。

mysql中有那些鎖。

4.1 按使用場景來劃分。

4.1.1 共享鎖:共享鎖時行級別的鎖。共享鎖之間不互斥。

4.1.2 意向共享鎖:是表級別的鎖,它預示著,事務有意向對錶中某些行加共享鎖。

4.1.3 排他鎖:是行級別的鎖。就是獨佔鎖,獨佔鎖與其他鎖都互斥。

4.1.4 意向排他鎖:是表級別的鎖,它預示著,事務有意向對錶中某些行加排他鎖。

4.2 按鎖的粒度劃分。

4.2.1 記錄鎖(record locks): 這個鎖是加在索引上的,索引查詢必須命中索引才能使用這個鎖。

4.2.2 間隙鎖(gap locks):這個鎖也是載入索引上的,但是它能夠設定一定的範圍,相當於鎖定了一定範圍的索引資料,也就解決了幻讀的情況。

4.2.3 臨鍵鎖(next-key locks):臨鍵鎖,是記錄鎖與間隙鎖的組合,它的封鎖範圍,既包含索引記錄,又包含索引區間。

mysql是採用什麼鎖來解決上述資料一致問題的。

5.1 讀未提交的事務隔離級別的加鎖方式。

5.1.1 a事務讀取記錄,不加鎖

5.1.2 b事務更新記錄,加的是共享鎖。

5.2 讀提交的事務隔離級別的加鎖方式。

5.2.1 a事務讀取記錄,加共享鎖,讀完馬上釋放共享鎖。

5.2.2 b事務更新記錄,加排他鎖,知道事務提交,才釋放鎖。

5.2.3 這種方式解決了髒讀,a事務看不到b事務未提交的資料。

5.3 可重複讀的事務隔離級別的加鎖方式。

5.3.1 a事務讀取記錄,加共享鎖,一直到事務提交完畢了。

5.3.2 b事務更新記錄,加排他鎖,一致到事務提交完畢了。

5.3.3 解決了不可重複讀的問題,因為在a事務讀取記錄時,b事務不能獲取到這個記錄的排他鎖。其實類是與序列執行。

5.3.4 解決了幻讀的問題,採用了行鎖中的(gap locks)來解決幻讀的問題

Mysql鎖機制與併發控制

鎖是計算機協調多個程序或純執行緒併發訪問某一資源的機制。在資料庫中,除傳統的計算資源 cpu ram i o 的爭用以外,資料也是一種供許多使用者共享的資源。如何保證資料併發訪問的一致性 有效性是所在有資料庫必須解決的乙個問題,鎖衝突也是影響資料庫併發訪問效能的乙個重要因素。從這個角度來說,鎖對資料...

mysql 併發控制 mysql併發控制

mysql併發控制 當有多個查詢需要同時修改同乙個資料,就會產生併發控制的問題。mysql可以在兩個層面進行併發控制 伺服器層和儲存引擎層。mysql通過加鎖實現併發控制 鎖有兩類 讀鎖 共享鎖,即乙個讀鎖不會阻塞其它讀鎖,多個使用者可同時讀取同乙個資源,而不互相干擾。寫鎖 排他鎖,即乙個寫鎖會阻塞...

mysql 併發控制

1 多個執行緒同時修改資料,存在資料不一致的情況,也就是併發控制的問題。2 mysql提供讀鎖和寫鎖,讀鎖之上可以再加讀鎖,不能加寫鎖,而寫鎖之上不能加任何鎖。也就是說,讀鎖是共享的,寫鎖是排他的。3 鎖粒度,為了更好的併發控制,鎖的粒度應該盡可能小,也就是只鎖定修改的資料。但是,鎖本身也有一定的開...