您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關Mysql-InnoDB事物的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
事物基本概念
事物的特性(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 ?技術
分為 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
重做日志格式
redo_log_type:重做日志的類型
space:表空間的ID
page_no:頁的偏移量
LSN(log sequence number)
8字節,單調遞增
含義:
重做日志寫入總量
checkpoint的位置
頁的版本
undo
undo segment:共享表空間內
(128個)rollback segment > (1024個)undo segment ,事物并發限制在128*1024
undo log 格式
insert undo log
update undo log
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事物的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。