Mysql工作流程分析

Jelly_lyj發表於2017-03-18

Mysql工作流程圖

                          

 

 

 

工作流程分析

1. 所有的使用者連線請求都先發往連線管理器

2. 連線管理器
    (1)一直處於偵聽狀態
    (2)用於偵聽使用者請求

3. 執行緒管理器
    (1)因為每個使用者請求都需要開啟一個執行緒來響應
    (2)所以執行緒管理器通過給使用者建立新的執行緒或完成執行緒重置的方式給使用者一個響應執行緒

4. 使用者模組
    (1)對使用者連線請求需要檢查使用者許可權
    (2)使用者模組用於驗證使用者身份和使用者請求(是否有訪問mysql伺服器的許可權)
    (3)若使用者請求不通過,由使用者模組負責退回使用者請求
    (4)若使用者請求通過,則使得使用者連線
 
5. 命令分發模組
    (1)一旦使用者具有連線許可權,那麼使用者就可以發一些SQL語句
    (2)命令分發模組負責把不同型別的語句分配到與之對應的解析器上
    |
    |
    |———>6. 快取模組  
    |                 (1)若使用者發的SQL語句是一個查詢語句,且快取中有查詢結果的內容
    |                 (2)則命令分發模組與快取模組互動
    |                 (3)由快取模組直接把這個結果返回給使用者(詳見mysql快取機制)
    |
    |———>7. 日誌模組       
                       (1)使用者發起一個命令(語句),都會記錄在日誌中
                       (2)日誌模組主要功能是記錄使用者查詢
                       (3)所以命令分發模組也有可能和日誌模組進行互動

8. 解析器
    (1)解析查詢生成解析數,由解析器判斷命令最終屬於哪種語句
    (2)交給它下面的底層模組進行分段解析
    |
    |
    |———>8.1 優化器
    |                    如果解析器解析此命令是select語句,需要交給優化器進行優化
    |———>8.2 表定義模組
    |                    如果是update、insert、delete語句,需要交給表定義模組
    |———>8.3 表維護模組
    |                    如果是repair相關的語句,需要交給表維護模組了,表維護模組主要作用是修復表中的某些邏輯錯誤
    |———>8.4 複製模組
    |                    mysql中的主從伺服器同步過程需要複製模組
    |———>8.5 狀態報告模組
                         mysql中的狀態變數需要狀態報告模組來儲存每一個執行過程中的狀態資訊

9. 訪問控制模組
     (1)這個命令(語句)想要真正執行,還是要通過訪問控制模組來檢查許可權
     (2)訪問控制模組用於檢驗使用者的操作是否具有足夠的操作許可權(是否能對錶進行更新或修改操作等)
             
10. 表管理器
       (1)若有足夠的操作許可權,則由表管理器完成真正的命令操作
       (2)表管理器負責建立/讀取/修改表定義檔案
   
11. 儲存引擎介面和儲存引擎
       (1)表管理器通過儲存引擎介面交給儲存引擎(核心):MYISAM/INnoDB
       (2)可以把儲存引擎比喻成大腦,之前所有的步驟使之做出了所有準備動作,等大腦發號施令就可以實施動作了
       (3)這時才能真正對檔案系統中的資料庫檔案做出修改

 

 

 


參考和輔助理解資料

《原來MySQl就是這樣工作的!》

《形象地理解程式和執行緒》

《關於程式和執行緒的總結》