1、四大特性
1.1 原子性(Atomicity)
一個事務是不可分割的最小作業單位,一個事務是不可分割的最小作業單位,
利用undo log保證原子性,undo log記錄的是操作的反向陳述句,例如執行的insert陳述句,則undo log記錄的是delete陳述句,
1.2 一致性(Consistency):
事務執行前后的資料,必須保持一致,
利用redo log保證持久性,需要注意redo log和binlog的一致性,為了保證一致性,mysql的內部存在XA事務,俗稱日志的兩階段提交協議,
redo log 記錄的是資料的物理變化,所以叫物理日志,當我們修改資料的時候,寫完記憶體了,但資料還沒真正寫到磁盤的時候,此時我們的資料庫掛了,我們可以根據redo log來對資料進行恢復!
binlog 記錄的是資料的邏輯變化,所以又叫邏輯日志,statement模式下記載的是update/delete/insert這樣的SQL陳述句,主要用來主從復制和恢復資料用
XA事務:將事務提交分為了兩個階段,prepare階段和commit階段
prepare:寫入redo log,并將回滾段置為prepared狀態,此時binlog不做操作
commit:innodb釋放鎖,釋放回滾段,設定提交狀態,寫入binlog,然后存盤引擎層提交,
mysql資料庫崩潰恢復:
崩潰恢復時,掃描最后一個Binlog檔案,提取其中的xid;
InnoDB維持了狀態為Prepare的事務鏈表,將這些事務的xid和binlog中記錄的xid做比較,如果在binlog中存在,則提交,否則回滾事務,
1.3 隔離性(Isolation):
多個事務之間資料要相互隔離,即彼此獨立和透明互不影響,
利用鎖和MVCC機制保證隔離性
隔離級別分為:讀未提交、讀已提交、可重復讀、串行化
四種隔離級別主要是為了解決:臟讀、不可重復讀、幻讀等情況
詳細說明見 4
1.4 持久性(Durability):
事務一旦被提交(commit / rollback ),資料的改變是永久性的,
2、大事務
執行時間很長的事務,會造成大量的阻塞和鎖超時,容易造成主從延遲,回滾費勁等
監控:監控表 information_schema.Innodb_trx ,設定長時間閾值,超過了報警或者kill
select * from information_schema.innodb_trx where TIME_TO_SEC(timediff(now(),trx_started))>60;
3、資料庫宕機重啟,事務丟失
主要sync_binlog配置(控制binlog刷盤時機)和innodb_flush_log_at_trx_commit配置(配置redolog刷盤時機)
默認innodb_flush_log_at_trx_commit=1 sync_binlog=0 :每次事務提交時都將 redo log 直接持久化到磁盤.但是MySQL不控制binlog的重繪,由作業系統自己控制它的快取的重繪
4、隔離性
隔離級別:讀未提交、讀已提交、可重復讀、串行化
解決問題:臟讀、不可重復讀、幻讀
名詞解釋
臟讀:某個事務執行時,讀到了其他事務還沒commit的資料,其他事務進行了回滾操作,就造成了臟讀,也就是讀到了臟資料
不可重復讀:某事務執行時,事務執行程序中任意兩個時間點讀取同一資料時結果不同,原因是讀取某一個資料后,其他事務進行了update、commit操作,此時再讀資料就出現了內容不一致情況,主要出現在update上
幻讀:a按某個規則讀取記錄后,b事務執行了insert陳述句,a再查詢的時候就會發現相同規則出來的資料有變化,主要出現在insert上
讀未提交:mysql的最低隔離級別,相當于什么措施都沒有
讀已提交:只能讀取其他事務提交的資料,解決了臟讀,但是不能解決不可重復讀
可重復讀:mysql的默認隔離級別
串行化:最高級別的隔離,所有的事務順序執行,隔離效果最好,性能最差
讀已提交和可重復讀分別是用行鎖、間隙鎖和MVCC機制實作的,
5、鎖
只有在inner DB下才會存在鎖的概念
范圍鎖
表鎖:直接鎖定一個表、其余所有對表的操作都被阻塞,一般用在DDL處理時(insert,alter、drop)
行鎖:凍結一行或者幾行,比如where name ='張三',則鎖定所有name=張三的行
其他鎖
共享鎖:S鎖,加了S鎖之后可以允許其他事務讀該記錄
排他鎖:X鎖,加了X鎖之后不允許其他事務讀該記錄
記錄鎖:僅鎖定單挑索引記錄的資料
間隙鎖:凍結一個索引區間,比如where id in (1,4,6,8),那么會凍結1-4行 5-8行兩個區間,左開右閉
意向鎖:可以與表鎖或者行鎖共用,比如某事務給某一行加了一個排他鎖,會同時給表添加一個意向鎖,那么事務2讀該表時就可以不用每條記錄的判斷是否有鎖,而是可以直接通過意向鎖知道鎖的位置,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/433191.html
標籤:其他
