mysql 服務器邏輯架構

第一層,每個客戶端連接都會在服務器進程中擁有一個線程,服務器會緩存這些線程,所以不需要爲每個連接創建或者銷燬線程;(連接處理,身份驗證,安全性)。

第二層,mysql的核心服務都在這一層,包括查詢解析,分析,優化,緩存以及內置函數等等。

第三層,存儲引擎負責mysql中數據的存儲和提取。

 

連接管理與安全

每個客戶端連接都會在服務器進程中擁有一個線程,這個連接的查詢只會在這個單獨的線程中執行,該線程只能輪流在某個CPU核心或者CPU中運行。服務器會負責緩存線程,因此不需要爲每一個新建的連接創建或者銷燬線程。(注:MySQL5.5或者更新的版本提供的一個API,支持線程池插件,可以使用池中少量的線程來服務大量的連接)。

當客戶端(應用)連接到MySQL服務器時,服務器需要對其進行認證。認證基於用戶名,原始主機信息和密碼。如果使用了安全套接字(SSL)的方式連接,還可以使用X.509證書認證。一旦客戶端連接成功,服務器會繼續驗證客戶端是否具有某個特定查詢的權限(例如,是否允許客戶端對world數據庫的Country表執行SELECT語句)。

優化與執行

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

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章