高性能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下工做
相關文章
相關標籤/搜索