mysql工作流程

2022-09-14 22:30:25 字數 1873 閱讀 3897

資料庫執行流程圖:

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

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,如:update,delete,insert,create table,alter table 等語句的處理。

當表變更管理模組「獲取」開啟的表之後,就會根據該錶的相關資訊,判斷表的儲存引擎型別和其他相關資訊。根據表的儲存引擎型別,提交請求給儲存引擎介面模組,呼叫對應的儲存引擎實現模組,進行相應處理。

不過,對於表變更管理模組來說,可見的僅是儲存引擎介面模組所提供的一系列「標準」介面,底層儲存引擎實現模組的具體實現,對於表變更管理模組來說是透明的。他只需要呼叫對應的介面,並指明表型別,之後介面模組會根據表型別呼叫正確的儲存引擎來進行相應的處理。

當一條 query 或者乙個 command 處理完成(成功或者失敗)之後,控制權都會交還給連線線程模組。

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

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

Struts工作流程

文章分類 招聘求職 乙個使用者的請求是通actionservlet來處理和 的。那麼,actionservlet如何決定把使用者請求 給哪個action物件呢?這就需要一些描述使用者請求路徑和action衍射關係的配置資訊了。在struts中,這些配置對映資訊都儲存在特定的xml檔案struts c...

zf工作流程

zend controller是使用mvc模式來構建乙個站點的基礎。zend controller體系是乙個輕量的,模組化和可擴充套件的體系。它只提供最核心的必要的部分,允許開發者有很大的自由來靈活地構建自己的站點。使用zend controller的站點,其檔案組織和 結構會比較相似。zend c...

spring MVC 工作流程

1 首先來配置一下dispatcherservlet spring mvc和大部分mvc框架一樣,底層也是依賴servlet api的,所以spring mvc的請求處理也是從乙個servlet開始,這個servlet就是dispatcherservlet.以下是在web.xml中dispatche...