wal機制, 先採用日誌的方式將操作記錄下來,然後重新整理磁碟。
innodb遵循wal協議,在日誌持久化到磁碟之後,才會將日誌對應的髒頁刷 回磁碟;
innodb記憶體中,dml操作順序如下:
– 寫undo(獲取rollback_ptr系統列)
– 修改page
– 寫redo的順序
不同的update語句,寫的日誌量有較大差異(三種update case);
– in place update日誌量最小,操作最簡單;
– 不修改主鍵列,日誌量其次;
– 修改主鍵列,日誌量最大,操作最複雜;
日誌檔案:
redo:保證事務的永續性
順序寫,基本上不用讀操作,只有在異常down機後才會讀進行資料恢復操作。
何時寫: 事務提交時
當log buffer中有一半的記憶體空間已經被使用時
log checkpoint時
例項shutdown時
binlog切換時
undo:
保證事務的原子性
事務回滾及mvcc控制
隨機讀寫。
每執行一次事務,都需要做一次fsync操作,因此磁碟的效能影響fsync的效能, fsync效能也就影響到資料庫的效能。 資料庫可以通過引數來控制,提交事務時不寫日誌,而是由非同步操作來刷日誌,但是異常時會丟乙個週期內的事務資料。
innodb_flush_log_at_trx_commit引數設定 0\1\2
預設 1
1 : 每commit一次呼叫一次fsync寫日誌,寫資料檔案
0: 非同步控制,mysql執行緒每隔1秒非同步執行fsync, db crash 會有1秒的資料丟失
2: 非同步控制,寫入作業系統快取,不進行fsync,由作業系統進行排程fsync,作業系統crash會有資料丟失。
二進位制日誌與重做日誌的區別:
1、二進位制日誌所有儲存引擎都有的,而重做日誌只有innodb才有
2、二進位制日誌是邏輯日誌,裡面記錄了sql語句,而重做日誌是物理日誌,記錄的是每個頁的修改page位置等資訊
MySQL原理解讀 事務
資料庫事務有4個屬性,我們叫它們acid,分別為原子性 一致性 隔離性和永續性 1.1 原子性 atomicity 乙個事務內的操作是不可分割的,要麼都成功,要麼都失敗 事務把資料從乙個正確的狀態遷移到另乙個正確的狀態 併發事務相互隔離 多個事務之間的操作過程不可見 資料是持久化儲存的 比如存到磁碟...
MySQL事務調優
資料庫事務是資料庫系統執行過程中的乙個邏輯處理單元,保證乙個資料庫操作要麼成功,要麼失敗。資料庫事務具有以下四個基本屬性 正是這些特性,才保證了資料庫事務的安全性。而在mysql中,鑑於myisam儲存引擎不支援事務,mysql的事務都是在innodb儲存引擎的基礎上進行的。innodb實現了兩種型...
mysql事務隔離級別及原理
參考 目錄 1 事務 資料庫邏輯的基本單元,acid 問題一 mysql怎麼保證一致性?問題二 mysql怎麼保證原子性?問題三 mysql怎麼保證永續性?問題四 mysql怎麼保證隔離性?2 mysql預設隔離級別 可重複讀 3 mysql如何解決幻讀 總結幾種隔離級別如何出現的邏輯 原子性 at...