1. 程式人生 > >MySQL架構一:邏輯架構

MySQL架構一:邏輯架構

和其他資料庫系統相比,MySQL有點與眾不同,它的架構可以在多種不同場景中應用併發揮好的作用,但同時也會帶來一點選擇上的困難。MySQL並不完美,卻足夠靈活,能夠適應高要求的環境,例如Web類應用。同時,MySQL即可以嵌入到應用程式中,也可以支援資料倉庫、內容索引和部署軟體、高可用的冗餘系統、線上事物處理系統(OLTP)等各種應用型別。

為了充分發揮MySQL的效能並順利的使用,就必須理解其設計、MySQL的靈活性提現在很多方面、例如,你可以通過配置使他子不同的硬體上都執行的很好,也可以支援多種不同的資料型別。但是,MySQL最重要、最與眾不同 的特性是它的儲存引擎架構,這種架構的設計將查詢處理(Query Processing)及其他系統任務(Server Task)和資料的儲存/提取相分離。這種處理和儲存分離的設計可以在使用時根據效能、特性,以及其他需求來選擇資料儲存的方式。

本篇主要描述MySQL的伺服器架構、各種儲存引擎之間的主要區別,以及這些區別的重要性

一、MySQL邏輯架構

如果能在頭腦中構建出衣服MySQL各元件之間如何協同工作的架構圖,會有助於深入理解MySQL伺服器。

最上層的服務並不是MySQL所獨有的,大多數基於網路的客戶端/伺服器的工具或者服務都有類似的架構、比如連結處理器、授權認證、安全攔截等。

第二層架構是MySQL比較有意思的部分、大多數MySQL的核心服務功能都在這一層,包括查詢解析、分析、優化、快取以及所有的內建函式(日期、時間、數學運算、加密函式等),所有跨儲存引擎的功能都在這一層實現:儲存過程、觸發器、檢視等。

第三層包含了儲存引擎。儲存引擎負責MySQL中資料的儲存和提取。和GNU/Linux下的各種檔案系統一樣,每個儲存引擎都有他的優勢和劣勢。伺服器通過API與儲存引擎進行通訊。這些介面遮蔽了不同儲存引擎之間的差異,使得這些差異對上層的查詢過程透明。儲存引擎API包含幾十個底層函式,用於執行:開啟事物或根據主鍵提取記錄等操作。單儲存引擎不會去解析SQL,不同儲存引擎之間也不會相互通訊,只是簡單的相應上層伺服器的請求。

1.連線管理與安全性

每個客戶端連線都會在伺服器程序中擁有一個執行緒,這個連結的查詢只會在這個單獨的執行緒中執行,該執行緒只能輪流在某個CPU核心或CPU中執行。伺服器會負責快取執行緒,因此不需要為每一個新建的連結建立或者銷燬執行緒。

當客戶端連線到MySQL伺服器時,伺服器需要對其進行認證。認證基於使用者名稱、原始主機資訊和密碼。如果使用了安全套接字(SSL)的方式連線,還可以使用X.509證書認證。一旦客戶端連線成功,伺服器會繼續驗證該客戶端是否具有執行某個特定查詢的權利

2.優化與執行

MySQL會解析查詢,並建立內部資料結構(解析樹),然後對其進行各種優化,包括重寫查詢、決定表的讀取順序,以及選擇合適的索引等。使用者可以通過特殊的關鍵字提示(hint)優化器,影響它的決策過程。也可以請求優化器解釋(explain)優化過程的各個因素,使使用者可以知道伺服器時如何進行優化決策的,並提供一個參考基準,便於使用者重構查詢和schema、修改相關配置等,使應用盡可能高效執行、

優化器並不關心表使用的是什麼儲存引擎,但儲存引擎對於優化查詢時有影響的。優化器會請求儲存引擎提供容量或某個具體操作的開銷資訊,以及表資料的統計資訊等。例如,某些儲存引擎的某種索引,可能對一些特定的查詢有優化。

對於select語句,在解析查詢之前,伺服器會先檢查查詢快取(Query Cache),如果能夠在其中找到對應的查詢,伺服器就不必在執行查詢解析、優化和執行的整個過程,而是直接返回查詢快取中的結果集。

3.併發控制

併發控制無非就是一些鎖機制,在這裡不在重複這些如果有需要可以自行搜尋下   MySQL如何控制併發讀寫   相關的有

讀寫鎖、鎖粒度的概念、表鎖與行級鎖

事物的四個特性:原子性、一致性、隔離性、永續性

事物的隔離級別:讀未提交、讀提交、可重複讀、序列化  以及死鎖的概念

這些基礎部分不在垂述,下一章節將詳細講解事物中和儲存引擎相關的其餘部分以及MVCC