併發控制(Innodb)的理解

併發控制保證數據一致性的常見手段有:
鎖(Locking),數據多版本(Multi Versioning)

普通鎖:
操作數據前鎖住,不允許其他併發操作
操作完成後,釋放鎖,讓其他任務執行

但是此舉太多簡單粗暴,讀任務也無法進行,於是出現了共享鎖和排他鎖:S鎖Share Locks和X鎖eXclusive Locks,添加數據時加S鎖,修改數據時加X鎖,
共享鎖之間不互斥:簡單記爲 讀讀可以並行
排他鎖與任何鎖互斥:簡單記爲:寫讀 寫寫不可並行

一旦寫數據的任務沒有完成,數據時不可能被其他任務讀取的,這對併發有較大的影響
對應到數據庫:寫事務沒有提交,讀相關數據的select也會被阻塞
有沒有可能,寫任務還沒有完成,其他讀任務也能併發,這就引出數據的多版本

進一步提高併發方法:數據多版本
核心原理是:1.寫任務發生時,將數據克隆一份,以版本號區分,2.寫任務操作新克隆的數據,直接提交,3.併發讀任務可以繼續讀取舊版本的數據,不至於阻塞
併發控制(Innodb)的理解

  1. 最開始數據的版本是V0;
  2. T1時刻發起了一個寫任務,這是把數據clone了一份,進行修改,版本變爲V1,但任務還未完成;
  3. T2時刻併發了一個讀任務,依然可以讀V0版本的數據;
  4. T3時刻又併發了一個讀任務,發依然不會阻塞
    總結:可通過讀取舊版本數據 極大的提高任務的併發度

提高併發的演進思路:
普通鎖,本質串行執行
讀寫鎖,讀讀併發
數據多版本,實行讀寫併發

ACID,指數據庫事務正確執行的四個基本要素的縮寫。包含:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)。
在這裏先說一下mysql的隨機IO和順序IO:mysql的數據最終都會刷到磁盤上去,刷盤分爲隨機IO和順序IO,一般會改變設計使隨機IO變爲順序IO來提高性能,
隨機IO:寫數據文件 ibd,MYD,MYI,Innodb數據文件 ibdata1, 同步信息記錄文件 master.info,relay-log.info
順序IO:主要在日誌方面,事務日誌:ib_logfile0,ib_logfile1,查詢日誌:general log。慢查詢日誌:
slow log錯誤日誌error log binlog and relay log
擴展:【如數據庫a,表格b。
1、如果表格b採用MyISAM,data\a中會產生3個文件:
b.frm :描述表結構文件,字段長度等
b.MYD(MYData):數據信息文件,存儲數據信息(如果採用獨立表存儲模式)
b.MYI(MYIndex):索引信息文件。

2、如果表格b採用InnoDB,data\a中會產生1個或者2個文件:
b.frm :描述表結構文件,字段長度等
如果採用獨立表存儲模式,data\a中還會產生b.ibd文件(存儲數據信息和索引信息)
如果採用共存儲模式的,數據信息和索引信息都存儲在ibdata1中
如果採用分區存儲,data\a中還會有一個b.par文件(用來存儲分區信息)】

對應到Innodb上:
redo undo 回滾
redo:數據庫事務提交後,將更新後的數據刷到磁盤上,保證ACID特性,磁盤隨機寫的性能較低,如每次都刷盤,極大影響數據庫的吞吐量,優化方法是 將修改行爲優先寫到redo日誌中(變成了順序寫),再定期將數據刷到磁盤上,及隨機寫優化爲順序寫。
總結:redo用於保障,如數據庫崩潰,重啓後,會重新做redo日誌中的內容。保證ACID一致性

undo:數據庫事務未提交時,會將事務修改數據的鏡像(舊版本)存放到undo日誌中,事務回滾時,或者數據庫崩潰時,可利用undo日誌,撤銷未提交事務對數據庫產生的影響。
細節:對於insert操作,undo日誌記錄新數據的PK(ROW_ID),回滾時直接刪除;
對於delete/update操作,undo日誌記錄舊數據row,回滾時直接恢復;
總結:undo日誌用於保障,未提交事務不會對數據庫的ACID特性產生影響。

回滾:存儲undo日誌的地方是回滾段
併發控制(Innodb)的理解
啓動事務:
start trx;
delete (1, shenjian);
update set(3, lisi) to (3, xxx);
insert (4, wangwu);
並且事務處於未提交的狀態。
併發控制(Innodb)的理解
(1)被刪除前的(1, shenjian)作爲舊版本數據,進入了回滾段;
(2)被修改前的(3, lisi)作爲舊版本數據,進入了回滾段;
(3)被插入的數據,PK(4)進入了回滾段;
接下來,假如事務rollback,此時可以通過回滾段裏的undo日誌回滾。
假設事務提交,回滾段裏的undo日誌可以刪除。
併發控制(Innodb)的理解
(1)被刪除的舊數據恢復了;
(2)被修改的舊數據也恢復了;
(3)被插入的數據,刪除了;
事務回滾成功,一切如故。

Innodb 多版本併發控制 存儲引擎

大部分的內容來源於:https://baijiahao.baidu.com/s?id=1608644276809286198&wfr=spider&for=pc%20https://home.firefoxchina.cn
理解着看的,希望以後能理解的更透徹

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章