mysql 事物状态有几种_mysql第三章 事务以及日志
mysql第三章 事務以及日志
一. 事物簡介
每條DDL DCL語句都是事務. 每個begin 到coomit語句是一個事務
二. 事物特性ACID以及開啟方式
1. 原子性(A),部成功執行或全部取消
2. 一致性(C),事物的開始到結束期間狀態保持一致
3. 隔離性(I),事物之互不干擾
4. 持久性(D) 事物提交后數據準確地記錄在數據庫中(redo),redobuff寫入到redolog中事務才算comit成功
5. 事物的開啟關閉
6. 開啟事務begin ;
7. 進行事物 DDL
8. 提交事物 commit; 隱形提交:DDL DCL 鎖定語句
9. 回滾事物(未提交才行) rollback;
三. redo log undo log 作用
1. redo log: 1.記錄了內存數據頁的變化 2.提供WAL 3.提供ACSR過程中實現前滾的動作
2. undo: 1.記錄數據修改之前的狀態 2.提供ACSR和事務工作中的回滾動作 3. 提供 undo 快照 (MVCC)
3. ACSR(自動故障恢復):Mysql斷電重啟時會檢查redo日志文件和數據文件LSN必須一致,如果不一致,已經提交的數據前滾(redo log)+CKPT,未提交數據回滾(undo log).
5. 總結: redo log和 undo log保證了事務ACID特性的ADC特性
6. 鎖(I):保證了事務ACID中的I特性和C特性
四. 隔離級別 *****
1. RU 讀未提交(臟讀),,
2. RC 讀已提交,會現幻讀,會出現不可重復讀(在大部分互聯網企業中是可以容忍的.金融公司除外) *****
3. RR 通過MVCC實現了可重復讀,但是有可能會出現幻讀現象,需配合,GAP和Next-lock進行避免幻讀現象, 必須索引支持 ***** (默認)
5. SR 串行化,性能低
注: mysql配置文件
transaction_isolation=read-uncommitted transaction_isolation=read-committed transaction_isolation=REPEATABLE-READ五.名詞解釋
redo buffer :redo log內存緩沖區域
buffer pool : ibd 的內存緩沖區域
LSN : 動作序列號(ibd ,redolog ,data buffer pool, redo buffer)
TXID:事務號,每一個事務生成一個事務號
前滾:構建臟頁(重新經數據調動到日志)
回滾:撤銷為提交的數據
ckpt:ibd數據刷寫到磁盤
written :redo 寫入等到OSBUFF(系統的buff)
WAL :持久性: redo buff 優先于buff pool 寫入到磁盤
幻讀:按照范圍update數據時,位commmit期間,數據范圍沒有被鎖.使用RR模式解決
不可重復讀:查詢數據期間,數據非靜態.
偽熱備:備份期間的變跟的數據不備份
relaylog: 主從復制中binlog轉存成relaylog
master.info : 記錄change master 信息
relaylog.info : 記錄relaylog的跟新號碼
六. ACSR 流程
假設我們做了一個事務,begin;update;commit.
1. 在begin ,會立即分配一個TXID=tx_01.
2. update時,會將需要修改的數據頁(dp_01,LSN=101),加載到data buffer中
3. DBWR線程,會進行dp_01數據頁修改更新,并更新LSN=102
4. LOGBWR日志寫線程,會將dp_01數據頁的變化+LSN+TXID存儲到redobuffer
5. 執行commit時,LGWR日志寫線程會將redobuffer信息寫入redolog日志文件中,基于WAL原則,
在日志完全寫入磁盤后,commit命令才執行成功,(會將此日志打上commit標記)
6. 假如此時宕機,內存臟頁沒有來得及寫入磁盤,內存數據全部丟失
7. MySQL再次重啟時,必須要redolog和磁盤數據頁的LSN是一致的.但是,此時dp_01,TXID=tx_01磁盤是LSN=101,dp_01,TXID=tx_01,redolog中LSN=102
MySQL此時無法正常啟動,MySQL觸發CSR.在內存追平LSN號,觸發ckpt,將內存數據頁更新到磁盤,從而保證磁盤數據頁和redolog LSN一值.這時MySQL正長啟動
以上的工作過程,我們把它稱之為基于REDO的"前滾操作"
六. 二進制日志(binlog)作用******
1. 主從和備份恢復依賴二進制
2. 只記錄已提交成功的事務的信息(DCL DDL DML)
3. DCL DDL:以語句的方式,原模原樣的記錄, DML則有有三種模式記錄(SBR RBR MBR)
SBR:做什么命令記錄什么,優點日質量少,缺點:記錄不準確,如插入now();
RBR記錄數據行的變化信息,優點:記錄準確,缺點:日質量大(默認,推薦)
MBR混合模式:不用
4. GTID模式: 以事務為單位記錄日志 .每一個事物生成一個GTID ,GTID= severi_uuid:TID事務號 pos動作號
5. 日志滾動規則:
5.1 刷新日志
5.2 重啟數據庫
5.3 二進制日志默認最大為1G(調小號碼容易用完)
七. 事務與線程
1. 會話可以創建多個事務,一個事務只能由一個會話產生
2. 一個事務可能會產生一個或多個線程,一個線程在同一時間內只能執行一個事務
3. 一個線程就是一個連接(會話)
4. 線程是串行事務
總結
以上是生活随笔為你收集整理的mysql 事物状态有几种_mysql第三章 事务以及日志的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu1804系统设置在哪里_斐讯
- 下一篇: 为什么有些xpath绝对路径拿不到数据_