mysql影片教學欄位介紹InnoDB的事物學習
#事物基本概念
事物的特性(ACID )
redo與undo redo
redo:保證事物的原子性、持久性,物理日誌,基本上是順序寫 undo:保證事物的一致性,邏輯日誌,undo會產生redo,用於事物回滾和mvcc,隨機讀寫
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
512 位元組和磁碟山區大小一致,保證日誌寫入是原子性的,不需要doublewrite ?技術
分為512 - 12 -8 = 492
重做日誌頭:12 位元組重做日誌內容:
重做日誌尾:8位元組
LOG_BLOCK_HAR_NO【4位元組】:log block在log buffer的位置
LOG_BLOCK_FIRST_REC_GROUP[2位元組】:第2位元組】一個日誌所在的偏移量
LOG_BLOCK_CHECKPOINT_NO【4位元組】:最後被寫入時的檢查點第4位元組的值? ?
多個多個重做日誌檔案組成
redo log file重做日誌格式
#redo_log_type:重做日誌的型別
space:表空間的IDpage_no:頁的偏移量
8字節,單調遞增
意義:重做日誌寫入總量
checkpoint的位置
頁的版本
##undo segment:共用表空間內
(128)rollback segment >(1024)undo segment ,事物並發限制在128*1024#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
以上是介紹 Mysql-InnoDB 事物學習的詳細內容。更多資訊請關注PHP中文網其他相關文章!