一文帶你看通透,MySQL事務ACID四大特性實現原理
1、ACID特性
原子性(Atomicity)
一致性(Consistency)
隔離性(Isolation)
永續性(Durability)
2、ACID 具體實現
原子性:透過undolog來實現。 永續性:透過binlog、redolog來實現。 隔離性:透過(讀寫鎖+MVCC)來實現。 一致性:MySQL透過原子性、永續性、隔離性最終實現資料一致性。
2.1 原子性原理
COMMIT 表示提交,即提交事務的所有操作並持久化到資料庫中。 ROLLBACK表示回滾,即在事務中執行的過程中發生了某種故障,事務不能繼續執行,系統將事務中對資料庫所有已完成的操作全部撤銷,回滾到事務開始時的狀態,這裡的操作指對資料庫的更新操作(查詢操作忽略)。這時候需要用到 undolog 來進行回滾。
insert語句,回滾時會執行 delete; delete語句,回滾時會執行insert; update語句,回滾時便執行相反的update,把資料改回來。
2.2 永續性原理
它類似於一個卸貨的小推車,我們若是每卸一件物品就拿著去入庫,那豈不是特浪費時間,若有一個小推車,我們將貨物首先存放在小推車,當推車滿了再往庫裡存,可以大大提升效率。 其實就是MySQL裡經常說到的WAL技術,WAL的全稱是Write-Ahead Logging,它的關鍵點就是先寫日誌,再寫磁碟,也就是先裝小推車,等不忙的時候再裝庫。
0——>事務提交時只把redo log留在redo log buffer 1——>將redo log直接持久化到磁碟(所以有個雙“1”配置,後面會講) 2——>只是把redo log寫到page cache
2.3 隔離性原理
MYSQL有四種隔離級別,用來解決存在的併發問題:髒讀、幻讀、不可重複讀。
表鎖:讀鎖(不會阻塞其他執行緒的讀操作,阻塞寫操作);寫鎖(讀寫操作都阻塞)
行鎖:需要的時候加上,並不是馬上釋放,等事務提交才釋放,兩階段鎖協議
鎖的型別
間隙鎖-gap lock:鎖定區間範圍,防止幻讀,左開右開,只在可重複讀隔離級別下生效—|—為了阻止多個事務將記錄插入到同一範圍內,而這會導致幻讀問題的產生
記錄鎖-record Lock:鎖定行記錄,索的索引,索引失效,為表鎖
臨鍵鎖-next-key Lock:record lock+gap lock 左開右閉(解決幻讀)
鎖的模式
select .... for update (持有寫鎖,別的不可加讀鎖,也不可加寫鎖)
select .... lock in share mode(持有讀鎖,別的可以再加讀鎖,不可加寫鎖)
共享鎖-讀鎖-S鎖
排他鎖-寫鎖-X鎖
意向鎖:讀意向鎖+寫意向鎖
自增鎖
全域性鎖:全庫邏輯備份
死鎖:兩個或多個事務在同一資源上相互佔用,並請求加鎖時,造成相互等待,無限阻塞
MVCC:實現多版本併發控制,實現原理:使用版本鏈+Read View
總結
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024924/viewspace-2939349/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 深入學習MySQL事務:ACID特性的實現原理MySql
- 搞懂MySQL InnoDB事務ACID實現原理MySql
- 【原創】Mysql中事務ACID實現原理MySql
- mysql淺談--事務ACID特性MySql
- 帶你瞭解資料庫中事務的ACID特性資料庫
- MySQL是如何實現事務的ACIDMySql
- 一文帶你深度解析MySQL 8.0事務提交原理MySql
- MySQL 學習筆記(一)MySQL 事務的ACID特性MySql筆記
- 面試題:MySQL事務的ACID如何實現?面試題MySql
- MySQL事務實現原理MySql
- 談談MySQL InnoDB儲存引擎事務的ACID特性MySql儲存引擎
- 帶你通透Netty原理之架構解析Netty架構
- 事務ACID特性與隔離級別
- ACID的實現原理
- Hive_使用ACID事務特性實現漸變維度SCD2操作Hive
- 一文帶你看懂Spring事務!Spring
- 探索Redis設計與實現14:Redis事務淺析與ACID特性介紹Redis
- MySQL 事務的四大特性以及隔離級別MySql
- MySQL 事務隔離級別實現原理MySql
- 一文帶你認識Spring事務Spring
- 【Mysql核心技術】聊聊事務的實現原理MySql
- 一文帶你搞懂資料庫事務資料庫
- 真實的面試翻車經歷,我以為我對Mysql(ACID原理、事務隔離級別、Mysql的鎖機制、事務底層實現原理)事務很熟,直到我遇到了阿里面試官。。。面試MySql阿里
- 【Spring】事務實現原理Spring
- Spring事務實現原理Spring
- Kafka事務實現原理Kafka
- Rama透過拓撲通用語言實現ACID事務
- 資料庫事務的四大特性資料庫
- 跨微服務的 ACID 事務微服務
- MySQL事務(二)事務隔離的實現原理:一致性讀MySql
- 事務的性質(ACID)
- Redis 事務支援 ACID 麼?Redis
- 一文搞懂MySQL事務的隔離性如何實現|MVCCMySqlMVC
- MySQL資料庫分散式事務XA的實現原理分析MySql資料庫分散式
- 一文徹底讀懂MySQL事務的四大隔離級別MySql
- 四大亮點帶你看 Linux 核心 5.6Linux
- ACID之I:事務隔離
- 事務的四大特性,以及隔離級別