網(wǎng)站開(kāi)發(fā)初學(xué)網(wǎng)絡(luò)推廣的重要性與好處
1、邏輯存儲(chǔ)結(jié)構(gòu)
2、架構(gòu)
a. 內(nèi)存結(jié)構(gòu)
Change Buffer的意義是什么?
與聚集索引不同,二級(jí)索引通常是非唯一的,并且以相對(duì)隨機(jī)的順序插入二級(jí)索引。同樣,刪除和更新可能會(huì)影響索引樹(shù)中不相鄰的二級(jí)索引頁(yè),如果每一次都操作磁盤(pán),會(huì)造成大量的磁盤(pán)IO。有了ChangeBuffer之后,我們可以在緩沖池中進(jìn)行合并處理,減少磁盤(pán)IO。
b. 磁盤(pán)結(jié)構(gòu)
c. 后臺(tái)線(xiàn)程
3、事務(wù)原理
事務(wù)是一組操作的集合,它是一個(gè)不可分割的工作單位,事務(wù)會(huì)把所有的操作作為一個(gè)整體一起向系統(tǒng)提交或撤銷(xiāo)操作請(qǐng)求,即這些操作要么同時(shí)成功,要么同時(shí)失敗。
事物特性:
- 原子性 (Atomicity)︰事務(wù)是不可分割的最小操作單元,要么全部成功,要么全部失敗。
- 一致性 (Consistency) :事務(wù)完成時(shí),必須使所有的數(shù)據(jù)都保持一致?tīng)顟B(tài)。
- 隔離性 (lsolation):數(shù)據(jù)庫(kù)系統(tǒng)提供的隔離機(jī)制,保證事務(wù)在不受外部并發(fā)操作影響的獨(dú)立環(huán)境下運(yùn)行。
- 持久性 (Durability):事務(wù)一旦提交或回滾,它對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)的改變就是永久的。
a. redolog
重做日志,記錄的是事務(wù)提交時(shí)數(shù)據(jù)頁(yè)的物理修改,是用來(lái)實(shí)現(xiàn)事務(wù)的持久性。
該日志文件由兩部分組成:重做日志緩沖(redo log buffer)以及重做日志文件(redo log file) ,前者是在內(nèi)存中,后者在磁盤(pán)中。當(dāng)事務(wù)提交之后會(huì)把所有修改信息都存到該日志文件中,用于在刷新臟頁(yè)到磁盤(pán),發(fā)生錯(cuò)誤時(shí),進(jìn)行數(shù)據(jù)恢復(fù)使用。
b. undolog
回滾日志,用于記錄數(shù)據(jù)被修改前的信息,作用包含兩個(gè)∶提供回滾和MVCC(多版本并發(fā)控制)。
undo log和redo log記錄物理日志不一樣,它是邏輯日志??梢哉J(rèn)為當(dāng)delete一條記錄時(shí),undo log中會(huì)記錄一條對(duì)應(yīng)的insert記錄,反之亦然,當(dāng)update一條記錄時(shí),它記錄一條對(duì)應(yīng)相反的update記錄。當(dāng)執(zhí)行rollback時(shí),就可以從undo log中的邏輯記錄讀取到相應(yīng)的內(nèi)容并進(jìn)行回滾。
Undo log銷(xiāo)毀: undo log在事務(wù)執(zhí)行時(shí)產(chǎn)生,事務(wù)提交時(shí),并不會(huì)立即刪除undo log,因?yàn)檫@些日志可能還用于MVCC。
Undo log存儲(chǔ): undo log采用段的方式進(jìn)行管理和記錄,存放在前面介紹的 rollback segment回滾段中,內(nèi)部包含1024個(gè)undo log segment。
4、MVCC
a. 基本概念
當(dāng)前讀:讀取的是記錄的最新版本,讀取時(shí)還要保證其他并發(fā)事務(wù)不能修改當(dāng)前記錄,會(huì)對(duì)讀取的記錄進(jìn)行加鎖。對(duì)于我們?nèi)粘5牟僮?#xff1a;select ... lock in share mode(共享鎖),select... for update、update、insert、delete(排他鎖)都是一種當(dāng)前讀。
快照讀:簡(jiǎn)單的select (不加鎖)就是快照讀,快照讀,讀取的是記錄數(shù)據(jù)的可見(jiàn)版本,有可能是歷史數(shù)據(jù),不加鎖,是非阻塞讀。
- Read Committed:每次select,都生成一個(gè)快照讀。
- Repeatable Read:開(kāi)啟事務(wù)后第一個(gè)select語(yǔ)句才是快照讀的地方。
- Serializable:快照讀會(huì)退化為當(dāng)前讀。
MVCC:全稱(chēng)Multi-Version Concurrency Control,多版本并發(fā)控制。指維護(hù)一個(gè)數(shù)據(jù)的多個(gè)版本,使得讀寫(xiě)操作沒(méi)有沖突,快照讀為MySQL實(shí)現(xiàn)MVCC提供了一個(gè)非阻塞讀功能。MVCC的真體實(shí)現(xiàn),還需要依賴(lài)于數(shù)據(jù)庫(kù)記錄中的三個(gè)隱式字段、undo log日志、readView,
b. 隱式字段
c. undo log
undo log 日志
- 回滾日志,在insert、update、delete的時(shí)候產(chǎn)生的便于數(shù)據(jù)回滾的日志。
- 當(dāng)insert的時(shí)候,產(chǎn)生的undo log日志只在回滾時(shí)需要,在事務(wù)提交后,可被立即刪除。
- 而update、delete的時(shí)候,產(chǎn)生的undo log日志不僅在回滾時(shí)需要,在快照讀時(shí)也需要,不會(huì)立即被刪除。
undo log 版本鏈:不同事務(wù)或相同事務(wù)對(duì)同一條記錄進(jìn)行修改,會(huì)導(dǎo)致該記錄的undolog生成一條記錄版本鏈表鏈表的頭部是最新的舊記錄,鏈表尾部是最早的舊記錄。
d. read view
ReadView (讀視圖)是快照讀SQL執(zhí)行時(shí)MVCC提取數(shù)據(jù)的依據(jù),記錄并維護(hù)系統(tǒng)當(dāng)前活躍的事務(wù)(未提交的) id。
ReadView 中包含了四個(gè)核心字段:
不同的隔離級(jí)別,生成ReadView的時(shí)機(jī)不同:
READ COMMITTED | 在事務(wù)中每一次執(zhí)行快照讀時(shí)生成ReadView。 |
REPEATABLE READ | 僅在事務(wù)中第一次執(zhí)行快照讀時(shí)生成ReadView,后續(xù)復(fù)用該ReadView, |