MySQL簡介

1,MySQL架構mysql

2,事務的ACID屬性,由存儲引擎實現,表鎖,行鎖依賴於引擎的實現方式,InnoDB,XtraDB實現了ACIDsql

3,事務隔離級別架構

    1)Read Uncommited,未提交讀,實際並不會比其級別性能好多少,通常不採用此級別,可是會產生:
併發

        髒讀:事務能夠讀取未提交的數據。性能

    2)Read Commited,提交讀,大多數db的默認隔離級別(mysql不是),解決了髒讀,可是會產生:大數據

        不可重複讀:一個事務在未提交數據時對其它事務不可見,致使(其它事務)讀操做兩次一樣的查詢,可能獲得不一樣的結果。
spa

    3)Repeatable Read,可重複讀,解決了髒讀,也保證在同一個事務中屢次讀取一樣記錄的結果是一致的(不可重複讀),可是會產生:
操作系統

        幻讀:某個事務正在讀取某範圍內的記錄時,另一個事務在該範圍內插入了新的記錄,以前的事務再次讀取時,就產生了幻行。
日誌

         InnoDb、XtraDB存儲引擎經過多版本併發控制(MVCC)解決了幻讀,也是MySQL默認的隔離級別。
事務

    4)Serializable,可串行化,最高隔離級別,使事務串行執行,避免幻讀問題。這種隔離級別會在讀每一行數據時加鎖,因此容易致使鎖超時或竟爭問題,實際應用中不多使用此級別,要在沒有併發的狀況下才會考慮使用。    

    備註:

        不可重複讀與幻讀的定義很是類似,但能夠這麼理解:

        1)不可重複讀側重於描述update的狀況

        2)幻讀側重於描述insert/delete的狀況

4,死鎖

    是指兩個或者多個事務在同一資源上相互佔用,並請求鎖定對方資源佔用資源,從而致使惡性循環的現象。當多個事務試圖以不一樣的順序鎖定資源時,就可能會產生死鎖。多個事務同時鎖定同一個資源時,也會產生死鎖。

5,MySQL提供兩種事務引擎:InnoDB,NDB Cluster

6,InnoDB採用兩階段鎖定協議,在事務執行過程當中,隨時能夠鎖定,只有在執行COMMIT或ROLLBACK時才所有釋放鎖。

7,存儲引擎選擇:

    1)日誌型應用,這類應用對insert的要求很高,使用MyISAM,Archive引擎開銷低,insert速度很是快(只作Insert/Select操做,表級鎖);另外,若是同時須要select數據,因爲這種引擎是表級鎖,因此性能會明顯降低,能夠採用主/備庫的方式,將主庫insert數據複製到備庫進行select,或者對錶進行日期命名,查詢的時候查其它沒進行insert的表tb_16_月_日;

    2)只讀或大部份狀況下只讀,因爲MyISAM(先將數據寫入到內存,而後等待操做系統按期將數據寫入磁盤)引擎產生數據丟失的狀況比較嚴重,因此InnoDB優於MyISAM;

    3)訂單處理,因爲須要事務因此InnoDB;

    4)CD-ROM應用,MyISAM或MyISAM壓縮表,只讀,壓縮節省空間,方便複製;

    5)大數據量,InnoDB 3-5TB/庫,10TB選用數倉。

相關文章
相關標籤/搜索