1. 程式人生 > 實用技巧 >MySQL教程88-MySQL工作(執行)流程

MySQL教程88-MySQL工作(執行)流程

這裡主要介紹資料庫的具體工作流程。下面是一張簡單的資料庫執行流程圖:

下面從資料庫架構的角度介紹資料庫的工作流程:

1. 連線層

1)連線處理:客戶端同資料庫服務層通過連線管理模組建立 TCP 連線,並請求一個連線執行緒。如果連線池中有空閒的連線執行緒,則分配給這個連線,如果沒有,在沒有超過最大連線數的情況下,建立新的連線執行緒負責這個客戶端。

連線管理模組負責監聽對 MySQL Server 的各種請求,接收連線請求,轉發所有連線請求到執行緒管理模組。每一個連線上 MySQL Server 的客戶端請求都會被分配(或建立)一個連線執行緒為其單獨服務。而連線執行緒的主要工作就是負責 MySQL Server 與客戶端的通訊,接收客戶端的命令請求,傳遞 Server 端的結果資訊等。執行緒管理模組則負責管理維護這些連線執行緒。包括執行緒的建立,執行緒的快取等。

2)授權認證:在真正的操作之前,還需要呼叫使用者模組進行授權檢查,來驗證使用者是否有許可權。通過後,連線執行緒開始接收並處理來自客戶端的請求。

使用者模組所實現的功能,主要包括使用者的登入連線許可權控制和使用者的授權管理。它就像 MySQL 的大門守衛一樣,決定是否給來訪者“開門”。

在 MySQL 中,將客戶端請求分為了兩種型別:一種是 query(SQL語句),需要呼叫 Parser(查詢解析器)才能夠執行的請求;一種是 command(命令),不需要呼叫 Parser 就可以直接執行的請求。

2. SQL層

連線執行緒接收到 SQL 語句之後,將語句交給 Parser 進行語法分析和語義分析。之後根據型別的不同,有些會直接處理,有些會分發給其他模組來處理。


如果是一個 query 型別的請求,會將控制權交給 Query 解析器。

Query 解析器首先分析是不是一個 Select 型別的 query。是則呼叫查詢快取模組,讓它檢查該 query 在 Query Cache(查詢快取)中是否已經存在,如果有結果可以直接返回給客戶端。沒有結果則將控制權交給 Optimizer(查詢優化器),進行查詢的優化。

如果是表變更語句,則分別交給Insert 處理器、Delete 處理器、Update 處理器、Create 處理器,以及 Alter 處理器這些小模組來負責。

3. 儲存引擎層

在各個模組收到 Query 解析或其它模組分發過來的請求後,首先會通過訪問控制模組檢查連線使用者是否有訪問目標表以及目標欄位的許可權,如果有,就會呼叫表管理模組請求相應的表,並獲取對應的鎖。

表變更管理模組主要是負責完成一些 DML 和 DDL 的 query,如:updatedeleteinsertcreate tablealter table 等語句的處理。
當表變更管理模組“獲取”開啟的表之後,就會根據該表的相關資訊,判斷表的儲存引擎型別和其他相關資訊。根據表的儲存引擎型別,提交請求給儲存引擎介面模組,呼叫對應的儲存引擎實現模組,進行相應處理。 不過,對於表變更管理模組來說,可見的僅是儲存引擎介面模組所提供的一系列“標準”介面,底層儲存引擎實現模組的具體實現,對於表變更管理模組來說是透明的。他只需要呼叫對應的介面,並指明表型別,之後介面模組會根據表型別呼叫正確的儲存引擎來進行相應的處理。 當一條 query 或者一個 command 處理完成(成功或者失敗)之後,控制權都會交還給連線執行緒模組。

如果處理成功,則將處理結果(可能是一個 ResultSet,也可能是成功或者失敗的標識)通過連線執行緒反饋給客戶端。

如果處理過程中發生錯誤,也會將相應的錯誤資訊傳送給客戶端,然後連線執行緒模組會進行相應的清理工作,並繼續等待後面的請求。之後重複上面的過程,或者與客戶端斷開連線,最後關閉連線,釋放連線執行緒。