高性能Mysql——Mysql架構與歷史

###MySQL邏輯架構sql

輸入圖片說明

###併發控制服務器

  • 服務器層 :表級鎖架構

  • 存儲引擎層:行級鎖只有存儲引擎層(InnoDB、XtraDB)實現併發

共享鎖(Shared lock) 排他鎖(exclusive lock) 或 讀鎖(read lock) 寫鎖(write lock)atom

####鎖粒度日誌

  • 表級鎖( lock tables) Read Local
  • 行即鎖 (select lock in share mode、 select for update)

###事物 ####ACIDcode

  • 原子性(atomicity)
  • 一致性(consistency)
  • 隔離型(isolation)
  • 持久性(durability)

####隔離級別blog

  • READ UNCOMMIT(未提交讀):形成髒讀
  • READ COMMIT(提交讀):形成不可重複讀
  • REPEATABLE READ(可重複讀):還有幻讀(Innodb和Xtradb經過MVCC解決)
  • SERIALIZABLE(可串行讀):強制事物串行執行

輸入圖片說明

####死鎖 定義:兩個或者多個事物在統一資源上相互佔用,並請求鎖定對方佔用的自娛啊,從而致使惡性循環的現象圖片

解決方案:事務

  • 死鎖檢測
  • 死鎖超時機制 Innodb處理方式:將持有最少行級排他鎖的事物進行回滾

####事物日誌:提升事物效率 預寫式日誌(Write-Ahead Logging):修改數據時指修改內存拷貝,修改行爲記錄到持久在硬盤上的事物日誌中,持久化之後再慢慢刷回到磁盤

ps:順序I/O、隨機I/O

####Mysql的事物 事務型的存儲引擎:

  • InnoDB
  • NDB Cluster

自動提交AUTOCOMMIT

啓用:每個查詢都被看成一個事物執行提交操做
不啓用:全部查詢都放到一個事物中,直到COMMIT/ROLLBACK
DDL語句會強制執行COMMIT,好比 ALTER TABLE等語句
設置事物隔離級別:SET TRANSACTION IOSOLATION來設置事物隔離級別
ps:同一個事物中,使用多種存儲引擎時不可靠的,可能會形成非事務型表上的變動沒法回滾形成數據處於不一致的狀態

####多版本併發控制(MVCC,Multiversion Concurrency Control) 能夠認爲MVCC是行級鎖的變種,可是它在不少狀況下避免了加鎖操做,所以開銷更低,實現來非阻塞的讀,寫操做也只鎖定必要的行

實現方式:保存數據在某個時間點的快照

  • 樂觀併發控制
  • 悲觀併發控制

InnoDB實現

每行增長兩個隱藏的列實現:建立時間/過去時間<<<系統版本號
事務開始時刻的系統版本號會做爲事務的版本號
REPEATABLE READ(可重複讀)隔離級別下,MVCC實現
SELECT:
    -   行的版本號<=事物版本號:數據要麼在事務開始前已經存在,要麼是在事務自身插入或者修改過的
    -  行的刪除版本要麼未定義,要麼>事務版本號,確保事務讀取到的行,在事務開始以前未被刪除

INSERT:
    保存當前系統版本號爲行版本號
DELETE:
    保存當前系統版本號爲行刪除標識
UPDATE:
    InnoDB爲插入一行新紀錄,保存當前系統版本號爲行版本號,同時保存當前系統版本號到原來的行做爲行刪除標識

PS:MVCC只在REPEATABLE READ和READ COMMIT隔離級別下工做

相關文章
相關標籤/搜索