2、併發控制
3、事務
4、多版本併發控制
參考:
每個客戶端連線都會在服務程序中擁有乙個執行緒, 這個連線的查詢只會在這個單獨的執行緒找那個執行,該執行緒只能夠在某個cpu核心或者cpu中執行
對mysql進行查詢時, mysql會解析查詢,並建立內建資料介面(解析樹),然後對其進行各種優化(重寫查詢、決定表、讀取順序、選擇合適的索引),
優化器並不關心表所使用的的儲存引擎, 但優化語句對儲存引擎的查詢是有影響的
伺服器層和儲存引擎層的併發控制
通過鎖控制多個程序對同乙份資料的修改,避免衝突和資料損壞;當執行緒修改資料時,會鎖定資料,直到釋放後才允許其他執行緒修改
對於多執行緒同時修改同乙份資料的場景,通常使用併發控制來解決,而併發控制可以通過兩種鎖來實現
讓鎖的物件具有具有選擇性, 可以提高共享資源的併發性
盡量鎖定需啊喲修改的部分資料, 所不是所有資源,鎖定的資料越少, 系統的併發程度越高
acdi原則
read committed(提交讀)
事務直到未提交前,所作的修改對其他事務都是不可見的
大多數資料庫預設級別都是 read committed , mysql不是
repeatable read(可重複讀)
同乙個事務的多次讀取同樣的記錄的結果是一致的
mysql預設的事務隔離級別
serializable(可序列化)
mysql最高的隔離級別
通過強制事務序列執行, 避免幻讀的問題
會在讀取的每一行資料上加鎖, 實現避免幻讀,但會導致大量的超時和鎖競爭的問題
死鎖是多個事務在同乙個資源上相互占用, 並請求對方暫用的資源,從而導致惡性迴圈的現象
事務日誌
事務日誌可以提高事務的效率儲存引擎能夠自動恢復那些記錄到事務並持久化但資料本身寫會磁碟的資料儲存引擎在修改表的資料時,只需要修改其記憶體拷貝, 再把修改行為記錄到持久在硬碟上的事務日誌中,為不用將每次修改的資料本身持久到磁碟
事務日誌採用追加的方式, 因此只需要占用磁碟上的一小塊順序i/o,而不需要在磁碟的多個地方移動磁頭
mysql中的事務
mysql提供兩種事務引擎:innodb和ndb cluster
+ 自動提交
mysql預設採用自動提交事務的模式, 如果不顯式的開始乙個事務, 每個查詢都會被當做乙個事務提交
+ 混合使用儲存引擎
伺服器層不管理事務,事務有下層儲存引擎實現, 所以在同乙個事務中使用不同儲存引擎是不可靠的
+ 隱式和顯式鎖定
+ 隱式: 根據隔離級別在需要額時候, 自動加鎖
+ 顯式:使用 lock table 和 unlock table語句在伺服器層實現加鎖,與儲存引擎無關, 也不能替代事務處理
行級鎖的變種,大多數情況下避免了加鎖的操作,開銷更低
高效能mysql(第三版)
MySQL邏輯架構
庖丁解牛之前應該也是對牛的骨架有乙個全面的認知。同樣學習資料庫也從mysql的邏輯架構開始吧。了解mysql邏輯架構有助於深入理解mysql伺服器。最上層的服務並不是mysql所獨有的,大多數基於網路的客戶端 伺服器的工具或者服務都有類似的架構。比如連線處理 授權認證 安全等等。第二層,mysql大...
MySQL邏輯架構
mysql伺服器邏輯架構圖如下 每個虛線框為一層,總共三層。最上層的服務不是mysql特有的,大多數基於網路的客戶端 伺服器的工具或者服務都有類似的架構,為請求做連線處理,授權認證,安全等。第二層架構是大多數mysql的核心服務功能所在層,包括查詢解析,分析,優化,快取以及所有的內建函式,所有跨儲存...
MySQL 邏輯架構
對mysql架構的基本情況掌握了,才能深入學習高階mysql的一些知識。1.連線層 最上層是一些客戶端和連線服務,包含 本地sock通訊和大多數基於客戶端 服務端工具實現的類似於tcp ip的通訊。主要完成一些類似於連線處理 授權認證 及相關的安全方案。在該層上引入了執行緒池的概念,為通過認證安全接...