高性能mysql讀書筆記-事務篇
ACID
- Atomicity原子性
- Consistency一致性
- Isolation隔離性
- Durability持久性
隔離級別
- Read Uncommitted
- Read Committed
- Repeatable Read
- Serializable
死鎖
- innoDB檢測到死鎖的循環依賴, 會理解返回一個錯誤
- innoDB將持有最少行級排它鎖的事務回滾
事務日誌
- 採用追加方式, 寫日誌是操做磁盤上一小塊區域的順序io, 比隨機io快
- 預寫式日誌(Write-Ahead Logging), 即先寫入日誌, 後續慢慢寫入磁盤
mysql的事務
- AUTOCOMMIT(自動提交)
** show variables like 'autocommit';
** set autocommit=1;
- 設置會話隔離級別
** select @@tx_isolation;
** set session transaction isolation level read commited;
- 事務中不建議混合使用存儲引擎
- 隱式鎖定 顯示鎖定
** 數據庫根據隔離級別自動加鎖 - 隱式鎖定
** for update; lock in share mode - innoDB支持的顯式鎖定
MVCC
- 行級鎖的變種, 保存數據在某個時間點的快照實現, 有樂觀跟悲觀兩種併發控制
- repeatable read隔離級別下
** insert操做, 保存該數據行隱藏的建立版本號
** delete操做, 保存該數據行隱藏的過時版本號
** update操做, 在原數據行保存過時版本號, 新加一行添加建立版本號, 至關於刪除後添加
** select操做, 只查詢建立版本號小於本事務版本, 而且過時版本號大於本事務版本的數據
** 這樣能夠保證同一事務下不管什麼時候查詢, 獲得的數據是一致的
- mvcc只在repeatable read和read commited下工做
歡迎關注本站公眾號,獲取更多信息