###MySQL邏輯架構sql
###併發控制服務器
服務器層 :表級鎖架構
存儲引擎層:行級鎖只有存儲引擎層(InnoDB、XtraDB)實現併發
共享鎖(Shared lock) 排他鎖(exclusive lock) 或 讀鎖(read lock) 寫鎖(write lock)atom
####鎖粒度日誌
###事物 ####ACIDcode
####隔離級別blog
####死鎖 定義:兩個或者多個事物在統一資源上相互佔用,並請求鎖定對方佔用的自娛啊,從而致使惡性循環的現象圖片
解決方案:事務
####事物日誌:提升事物效率 預寫式日誌(Write-Ahead Logging):修改數據時指修改內存拷貝,修改行爲記錄到持久在硬盤上的事物日誌中,持久化之後再慢慢刷回到磁盤
ps:順序I/O、隨機I/O
####Mysql的事物 事務型的存儲引擎:
自動提交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隔離級別下工做