1. 程式人生 > >高效能mysql知識總結(一)

高效能mysql知識總結(一)

1.讀寫鎖:

       在處理併發讀或者寫時,可以通過實現一個由兩種型別的鎖組成的鎖系統來解決問題,如一個人正在讀取一個郵件表記錄,另外一個使用者試圖刪除編號為25的郵件,此時會出現資料讀取問題。

       解決辦法:併發控制,在處理併發讀或者寫時,可以通過實現一個由兩種型別的鎖組成的鎖系統來解決。通常稱為共享鎖(shared lock)和排他鎖(exclusive lock).也叫讀鎖(read lock)和寫鎖(write lock)

      讀鎖是共享的,互不阻塞。寫鎖是排他的,也就是一個寫鎖會阻塞其他的寫鎖和讀鎖,安全策略的考慮,只有這樣才能保證在給定的時間內,只有一個使用者能執行寫入,並防止其他使用者讀取正在寫入的統一資源。

2.鎖:

    鎖策略:就是在鎖的開銷和資料的安全性之間尋求平衡,這種平衡也會影響到效能。

   表鎖(table lock):

    表鎖是mysql中最基本的鎖策略,並且是開銷最小的策略。會鎖定整張表,一個使用者在對錶進行寫操作(插入、刪除、更新)前,需要先獲得鎖,會阻塞其他使用者對錶的所有讀寫操作,只有沒有寫鎖時,其他讀取的使用者才能獲得讀鎖,讀鎖之間不會互相阻塞。

    行級鎖(row lock):

         行級鎖可以最大程度的支援併發處理(同時也帶來了最大的鎖開銷)

2.事務:特性:ACID

    原子性(atomicity):一個事務必須被視為一個不可分割的最小工作單元,整個事務中的所有操作要麼全部提交成功,要麼全部失敗回滾

    一致性(consistency):資料庫總是從一個一致性的狀態轉換到另外一個一致性的狀態。如果系統崩潰,因為事物沒有提交,修改的不會儲存到資料庫中

   隔離性(isolation):一個事務所作的修改在最終提交以前,對其他事物是不可見的。

   永續性(durability):一旦事務提交,所作修改會永久儲存到資料庫中。

3 :隔離級別:

       READ UNCOMMITTED(未提交讀):該級別下,食物中的修改,即使沒有提交,對其他事務也是可見的,事務可以讀取未提交的資料,稱為髒讀

      READ COMMITTED(提交讀):是大多數資料庫系統預設的隔離級別(mysql不是),一個事務開始時,只能看見已經提交的事務做的修改。對其他事物不可見,也叫作不可重複讀

      REPEATABLE READ(可重複讀):解決了髒讀的問題,保證了在同一個事務中多次讀取同樣紀錄的結果是一致的,理論上無法解決幻讀的問題,幻讀是指當某個事務在讀取某個範圍內的記錄時,另外一個事務又在該範圍內插入了新的記錄,當之前的事務再次讀取該範圍的記錄時,會產生幻行。

     SERIALIZABLE(可序列化):是最高級別,強制事務序列執行,避免了幻讀問題,在讀取的每一行資料上都加鎖。

3.1:死鎖

     死鎖是指兩個或者多個事務在同一資源上相互佔用,並請求鎖定對方佔用的資源。

4.多版本併發控制:MVCC

   

    如:樂觀鎖、悲觀鎖