理解mysql 事務原理及常見優化思路

2021-09-02 20:51:15 字數 1040 閱讀 8030

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...