介紹 Mysql-InnoDB 事物學習

mysql視頻教程欄目介紹innodb的事物學習

介紹 Mysql-InnoDB 事物學習

推薦(免費):mysql視頻教程

事物基本概念

事物的特性(ACID)

  • 原子性 atomicity

  • 一致性 consistency

  • 隔離性 isolation

  • 持久性 durability

事物的類型

  • 扁平事物

  • 帶有保存點的扁平事物

  • 鏈事物 嵌套事務

  • 分布式事務

事物的實現

redo與undo redo
redo:保證事物的原子性、持久性,物理日志,基本上是順序寫
undo:保證事物的一致性,邏輯日志,undo會產生redo,用于事物回滾和mvcc,隨機讀寫

redo

redo log buffer
redo log file

force log at ?commit機制實現事物的持久性

redo log buffer -> 文件系統緩存 -> (fsync) 磁盤文件

innodb_flush_log_at_trx_commit
0:master Thread完成寫入磁盤
1:默認,每次事物提交必須fsync
2:寫入文件系統緩存,不執行fsync

log block

512 字節和磁盤山區大小一致,保證日志寫入是原子性的,不需要doublewrite ?技術

介紹 Mysql-InnoDB 事物學習

分為 512 – 12 -8 = 492
重做日志頭:12 字節
重做日志內容:
重做日志尾:8字節

LOG_BLOCK_HAR_NO【4字節】:log block在 log buffer的位置
LOG_BLOCK_HAR_DATA_LEN【2字節】:log block占用大小
LOG_BLOCK_FIRST_REC_GROUP【2字節】:第一個日志所在的偏移量
LOG_BLOCK_CHECKPOINT_NO【4字節】:最后被寫入時的檢查點第4字節的值 ??

log grooup

多個多個重做日志文件組成

redo log file

介紹 Mysql-InnoDB 事物學習

重做日志格式

介紹 Mysql-InnoDB 事物學習

redo_log_type:重做日志的類型
space:表空間的ID
page_no:頁的偏移量

LSN(log sequence number

8字節,單調遞增
含義:
重做日志寫入總量
checkpoint的位置
頁的版本

介紹 Mysql-InnoDB 事物學習

undo

undo segment:共享表空間內

(128個)rollback segment > (1024個)undo segment ,事物并發限制在128*1024

undo log 格式

insert undo log
update undo log

介紹 Mysql-InnoDB 事物學習

purge

group commit

事物的隔離級別

READ UNCOMMIT:使用查詢語句不會加鎖,可能會讀到未提交的行(Dirty Read)
READ COMMIT:只對記錄加記錄鎖,而不會在記錄之間加間隙鎖,所以允許新的記錄插入到被鎖定記錄的附近,所以再多次使用查詢語句時,可能得到不同的結果(Non-Repeatable Read)EPEATABLE READ:多次讀取同一范圍的數據會返回第一次查詢的快照,不會返回不同的數據行,但是可能發生幻讀(Phantom Read);
SERIALIZABLE:InnoDB 隱式地將全部的查詢語句加上共享鎖,解決了幻讀的問題;

臟讀:在一個事務中,讀取了其他事務未提交的數據
不可重復讀:在一個事務中,同一行記錄被訪問了兩次卻得到了不同的結果。
幻讀:在一個事務中,同一個范圍內的記錄被讀取時,其他事務向這個范圍添加了新的記錄。

不可重復讀的原因就是,在 READ COMMITED 的隔離級別下,存儲引擎不會在查詢記錄時添加行鎖,鎖定 id = 3 這條記錄。

分布式事物

XA

Resource Managers:提供訪問事物資源的方法
Transaction Maneger:協調參與全局事物中的各個事物
Application Program:定義事物的便捷,指定全局事物中的操作

介紹 Mysql-InnoDB 事物學習

? 版權聲明
THE END
喜歡就支持一下吧
點贊5 分享