MySQL學習筆記之四:並發控制和事務機制

來源:互聯網
上載者:User

標籤:事務   瑣   acid   mvcc   

一、mysql的並發控制

  當有多個查詢需要同時修改同一個資料,就會產生並發控制的問題。mysql可以在兩個層面進行並發控制:伺服器層和儲存引擎層。

  mysql通過加鎖實現並發控制:

  ⑴鎖有兩類:

     讀鎖:共用鎖定,即一個讀鎖不會阻塞其它讀鎖,多個使用者可同時讀取同一個資源,而不互相干擾。

     寫鎖:獨佔鎖定,即一個寫鎖會阻塞其它讀寫鎖,在給定時間內,只有一個使用者能執行寫入。

  ⑵鎖粒度:

     表級鎖:鎖定整張表

     行級鎖:並發程度更高,但維護較麻煩,會增加系統開銷,易產生死結。行級鎖只能在儲存引擎層級實現,MyISAM儲存引擎不支援行級鎖

  ⑶鎖分類:

     隱式鎖:由儲存引擎自動完成

     顯式鎖:使用者可手動施加鎖(表級鎖)

  ⑷手動加解鎖:伺服器層級

     LOCK TABLES tb_name {READ|WRITE},...;

     UNLOCK TABLES;

     FLUSH TABLES WITH READ LOCK;   #全域施加讀鎖


     InnoDB儲存引擎也支援另外一種顯式鎖(只鎖定挑選出的行):

       SELECT ... LOCK IN SHARE MODE;

       SELECT ... FOR UPDATE;  


二、事務

  事務(Transaction)是訪問並可能更新資料庫中各種資料項目的一個程式執行單元(unit);

  設想一個情境,A要向B轉賬500元,要經過兩個步驟:A從自己的賬戶中減去500元;向B的賬戶增加500元。顯而易見,只完成第一步或者只完成第二步都不合理,這兩個步驟必須放入一個事務中,當作一個不可分割的工作單位,要麼都執行,要麼都不執行。

  ⑴事務是恢複和並發控制的基本單位,要符合事務的概念,必須通過ACID測試:

     原子性(atomicity):一個事務是一個不可分割的工作單位,事務中包括的諸操作要麼都做,要麼都不做。

     一致性(consistency):事務必須是使資料庫從一個一致性狀態變到另一個一致性狀態。一致性與原子性是密切相關的。

     隔離性(isolation):一個事務的執行不能被其他事務幹擾。即一個事務內部的操作及使用的資料對並發的其他事務是隔離的,並發執行的各個事務之間不能互相干擾。

     持久性(durability):持久性也稱永久性(permanence),指一個事務一旦提交,它對資料庫中資料的改變就應該是永久性的

  ⑵事務的隔離等級:

     READ-UNCOMMITTED(讀未提交):事務中的修改,即使沒有提交,對其它事務也是可見的。事務可以讀取未提交的資料,這也稱為“髒讀”;最低的隔離等級

     READ-COMMTTED(讀提交):一個事務開始時,只能“看見”已提交的事務所做的修改,因此,再次執行同樣的查詢,可能得到不一樣的結果,稱為“不可重複讀取”。

     REPEATABLE-READ(可重讀):保證了在同一個事務中多次讀取同樣記錄的結果是一致的,可能引起“幻讀”;mysql預設隔離等級

     SERIALIZABILE(可序列化):加鎖讀,即事務請求不到鎖就無法讀,必須等到其它事務釋放鎖(提交或復原)後才行。

  ⑶查看mysql的隔離等級:SELECT @@global.tx_isolation;

  ⑷事務的啟動、提交和加滾:

     啟動:START TRANSACTION;

     提交:COMMIT;

     復原:ROLLBACK;

     儲存點:SAVEPOINT identifier;

     復原至某個儲存點:ROLLBACK [WORK] TO [SAVEPOINT] identifier;

     刪除某儲存點:RELEASE SAVEPOINT identifier;     

  ⑸MySQL的自動認可功能:SELECT @@GLOBAL.autocommit;

     預設是啟用的,修改autocommit僅對支援事務的儲存引擎產生影響;

     自動認可能保證資料及時寫入磁碟,但會造成頻繁I/O,降低系統效能。

  ⑹MVCC: 多版本並發控制;通過儲存資料在某個時間點的快照實現。無論事務執行多長時間,其看到的資料都是一致的。根據事務開始的時間不同,每個事務對同一張表、同一時刻看到的資料可能是不一樣的。MVCC僅在第二、第三隔離等級下有效;

  ⑺交易記錄:將隨機I/O轉換為順序I/O,以提升事務操作效率;交易記錄也稱為Write-Ahead Logging。

     資料從記憶體->交易記錄->資料檔案

     為減輕磁碟壓力,宜將交易記錄和資料檔案放於不同的磁碟上,交易記錄不宜太大;

  ⑻InnoDB支援事務,而MyISAM不支援


MySQL學習筆記之四:並發控制和事務機制

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.