redo?重做日志
作用:主要功能?保證?Durable(持久性)
記錄內(nèi)存數(shù)據(jù)頁(yè)的變化
為了保證事物的持久性?保證commit?完成前會(huì)redo將內(nèi)存的DML語(yǔ)句先寫(xiě)入磁盤(pán)? ? 而數(shù)據(jù)是當(dāng)內(nèi)存達(dá)到百分75才開(kāi)始寫(xiě)入磁盤(pán)
lsn:
當(dāng)事物提交完成后? ?突然斷電? ?然后重啟數(shù)據(jù)庫(kù)會(huì)對(duì)比LSN? 發(fā)現(xiàn)redo log?和idb文件? 如果不一致就會(huì)重新將數(shù)據(jù)寫(xiě)入磁盤(pán)
保證事物的durable
undo?回滾日志:
TXID:事物id號(hào)? commit之后? redo和undo會(huì)打標(biāo)記提交了
作用:在acid?主要保證automic的特性? 同時(shí)對(duì)consisdent isolate有一定的作用
記錄修改之前的狀態(tài)
當(dāng)事物還沒(méi)有提交的時(shí)候? 進(jìn)行rollback?操作? undo會(huì)判斷事物id是否提交? 去內(nèi)存還原數(shù)據(jù)
還有一種情況? 還沒(méi)提交事物? redo順帶把日志寫(xiě)入磁盤(pán)? 斷電重啟后先前滾?構(gòu)造臟頁(yè)?發(fā)現(xiàn)事物id沒(méi)有提交?undo在回滾還原數(shù)據(jù)庫(kù)
鎖
“鎖”顧名思義就是鎖定的意思抽碌。
“鎖”的作用是什么?
上一個(gè)事物沒(méi)有提交? ?一般會(huì)鎖表? 就是不能并發(fā)
在事務(wù)ACID過(guò)程中
涮总,“鎖”和“隔離級(jí)別”一起來(lái)實(shí)現(xiàn)“I”隔離性和"C"一致性(redo也有參與)
悲觀鎖:行級(jí)鎖定(行鎖)誰(shuí)先操作某個(gè)數(shù)據(jù)行
,就會(huì)持有<這行>的(X)鎖.樂(lè)觀鎖:沒(méi)有鎖
隔離級(jí)別
transaction_isolation 隔離級(jí)別(參數(shù))
transaction_isolation=read-uncommitted? ? RU:讀未提交,可臟讀,一般部議敘出現(xiàn)
transaction_isolation=read-committed? ? ? ?RC:讀已提交,可能出現(xiàn)幻讀,可以防止臟讀
transaction_isolation=?REPEATABLE-READ |??RR:可重復(fù)讀,功能是防止"幻讀"現(xiàn)象,利用的是undo的快照技術(shù)+GAP(間隙鎖)+NextLock(下鍵鎖)
SR:可串行化,可以防止死鎖,但是并發(fā)事務(wù)性能較差
什么叫做幻讀?
在更新操作之前? commit了一個(gè)insert操作? 出現(xiàn)了一些沒(méi)有更新的數(shù)據(jù)
補(bǔ)充:在RC級(jí)別下,可以減輕GAP+NextLock鎖的問(wèn)題,但是會(huì)出現(xiàn)幻讀現(xiàn)象,一般在為了讀一致性會(huì)在正常select后添加forupdate語(yǔ)句.但是,請(qǐng)記住執(zhí)行完一定要commit 否則容易出現(xiàn)所等待比較嚴(yán)重.
[world]>select*fromcitywhereid=999forupdate;
[world]>commit;
最高安全模式
innodb_flush_log_at_trx_commit=1
Innodb_flush_method=O_DIRECT
最高性能:
innodb_flush_log_at_trx_commit=0
Innodb_flush_method=fsync