首頁  >  文章  >  資料庫  >  【MySQL】MySQL邏輯架構

【MySQL】MySQL邏輯架構

黄舟
黄舟原創
2017-02-25 10:26:211538瀏覽

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

【MySQL】MySQL邏輯架構

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

第二層架構是MySQL比較有趣的部分。大多數MySQL的核心服務功能都在這一層,包括查詢解析、分析、最佳化、快取以及所有內建函數(例如,日期,時間,數學和加密函數),所有跨儲存引擎的功能都在這一層實作:預存過程,觸發器,視圖等。

第三層包含了儲存引擎。儲存引擎負責MySQL中資料的儲存和提取。和GNU/Linux下的各種檔案系統一樣,每個儲存引擎都有它的優點和缺點。伺服器透過API與儲存引擎通訊。這些介面屏蔽了不同儲存引擎之間的差異,使得這些差異對上層的查詢流程變得透明。儲存引擎API包含十幾個底層函數,用於執行諸如“開始一個事物”或“根據主鍵提取一行記錄”等操作。但儲存引擎不會去解析SQL(註:InnoDB是一個例外,它會解析外鍵定義,因為MySQL伺服器本身沒有實作該功能),不同儲存引擎之間也不會互相通信,而只是簡單地回應上層伺服器的請求。

連線管理與安全性

每個客戶端連線都會在伺服器行程中擁有一個線程,這個連線的查詢只會在這個單獨的執行緒中執行,該執行緒只能輪流在某個CPU核心或CPU中運作。伺服器會負責快取線程,因此不需要為每一個新建的連線建立或銷毀線程。 (註:MySQL5.5或更新的版本提供的一個API,支援執行緒池插件,可以使用池中少量的執行緒來服務大量的連線)。

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

優化與執行

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

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

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

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

【MySQL】MySQL邏輯架構

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

第二層架構是MySQL比較有趣的部分。大多數MySQL的核心服務功能都在這一層,包括查詢解析、分析、最佳化、快取以及所有內建函數(例如,日期,時間,數學和加密函數),所有跨儲存引擎的功能都在這一層實作:預存過程,觸發器,視圖等。

第三層包含了儲存引擎。儲存引擎負責MySQL中資料的儲存和提取。和GNU/Linux下的各種檔案系統一樣,每個儲存引擎都有它的優點和缺點。伺服器透過API與儲存引擎通訊。這些介面屏蔽了不同儲存引擎之間的差異,使得這些差異對上層的查詢流程變得透明。儲存引擎API包含十幾個底層函數,用於執行諸如“開始一個事物”或“根據主鍵提取一行記錄”等操作。但儲存引擎不會去解析SQL(註:InnoDB是一個例外,它會解析外鍵定義,因為MySQL伺服器本身沒有實作該功能),不同儲存引擎之間也不會互相通信,而只是簡單地回應上層伺服器的請求。

連線管理與安全性

每個客戶端連線都會在伺服器行程中擁有一個線程,這個連線的查詢只會在這個單獨的執行緒中執行,該執行緒只能輪流在某個CPU核心或CPU中運作。伺服器會負責快取線程,因此不需要為每一個新建的連線建立或銷毀線程。 (註:MySQL5.5或更新的版本提供的一個API,支援執行緒池插件,可以使用池中少量的執行緒來服務大量的連線)。

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

優化與執行

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

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

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

 以上就是【MySQL】MySQL邏輯架構的內容,更多相關內容請關注PHP中文網(www.php.cn)!


#
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn