mysql執行原理 mysql 執行原理

2021-10-17 15:32:57 字數 1913 閱讀 4305

闡述mysql系統的各個模組是如何相親相愛的完成乙個我們認為的很簡單的查詢工作的。

我們對啟動mysql,客戶端建立連線,請求query,得到返回結果,最終退出。這樣一整個過程來進行分析。

第一步:當我們執行啟動mysql系統的命令之後,mysql的初始化模組就從系統配置檔案中讀取系統引數和命令列引數,並按照引數來初始化整個系統,如申請並分配buffer,初始化全域性變數,以及各種結構等。同時各個儲存引擎也被啟動,進行各自的初始化工作。當整個系統初始化結束後,由連線管理模組接手,連線管理模組會啟動處理客戶端連線請求的監聽程式,包括tcp/ip的網路監聽,還有unix的socket,這時候,mysql server就基本啟動完成,準備好接受客戶端的請求了。

第二步:當連線管理模組監聽到客戶端的連線請求(借助網路互動模組的相關功能),雙方通過client & server互動協議模組所定義的協議「寒暄」幾句之後,連線管理模組就會將連線請求**給執行緒管理模組,去請求乙個連線線程。

第三步:執行緒管理模組接著將控制權交給連線線程模組,告訴連線線程模組,現在我這邊連線請求過來了,需要建立連線,你趕快處理一下。連線線程模組會在接收到連線請求後,首先檢查當前連線線程池中是否有被cache的空閒連線線程,如果有,就取出乙個和客戶端請求連線上,如果沒有空閒的連線線程,則建立乙個新的連線線程與客戶端請求連線。當然,連線線程模組並不是在接收到連線請求後馬上就會取出乙個連線線程和客戶端連線,而是首先通過呼叫使用者模組進行授權檢查,只有客戶端請求通過了授權檢查後,他才會將客戶端請求和負責請求的連線線程連上。

在mysql中,將客戶端的請求分為了兩種型別,一種是query,需要呼叫parser也就是query解析和**模組的解析才能夠執行的請求;一種是command,不需要呼叫parser就可以執行的請求。如果我們的初始化配置開啟了full query logging(慢日誌)的功能,那麼query解析與**模組就會呼叫日誌記錄模組將請求計入日誌。不管是乙個query型別的請求還是乙個command型別的請求,都會被記錄進入日誌,所以出於效能考慮一般很少開啟full query logging的功能。

第四步:當客戶端請求和連線線程「互換暗號(互通協議)」接上頭之後,連線線程就開始處理客戶端請求傳送過來的各種命令(或者query),接受相關請求。他將收到的query語句**給query解析和**模組,query解析器先對query進行基本的語義和語法解析,然後根據命令型別的不同,有些會直接處理,有些會分發給其他模組來處理。

如果是乙個query型別的請求,會將控制權交給query解析器,query解析器首先分析是不是乙個select型別的query,如果是,則呼叫查詢快取模組,讓它檢查該query在query cache中是否已經存在。如果有,則直接將cache中的資料返回給連線線程模組。然後通過與客戶端連線的執行緒將資料輸出給客戶端。如果不是乙個可以被cache的query型別,或者cache中沒有改query的資料,那麼query將被繼續傳回query解析器,讓query解析器進行相應處理,在通過query分發器分發給相關處理模組。

第五步:如果解析器解析結果是一條未被cache的select語句,則將控制權交給optimizer,也就是query優化器模組,如果是dml或者是ddl語句,則會交給表變更管理模組,如果是一些更新統計資訊、檢測、修復和整理類的query則會交給表維護模組去處理,複製相關的query則轉交給複製模組去進行相應的處理,請求狀態的query則交給狀態收集報告模組。實際上表變更管理模組根據所對應的處理請求的不同,是分別由insert處理器、delete處理器、update處理器、create處理器,以及alter處理器這些小模組來負責不同的dml和ddl的。

第六步:在各個模組收到query解析與分發模組發過來的請求後,首先會通過訪問控制模組檢查連線使用者是否有訪問控制目標表以及目標欄位的許可權,如果有,就會呼叫表管理模組請求相應的表,並獲取對應的鎖。表管理模組首先會看到該錶是否已經存在於table cache中,如果已經開啟則直接進行鎖相關的處理,如果沒有在cache中,則需要在開啟表檔案獲取鎖,然後將開啟的表交給表變更管理模組。

MySQL 執行原理

1.mysql基礎 mysql是乙個開放源 的關聯式資料庫管理系統。原開發者為瑞典的mysql ab公司,最早是在2001年mysql3.23進入到管理員的視野並在之後獲得廣泛的應用。2008年mysql公司被sun公司收購並發布了首個收購之後的版本mysql5.1,該版本引入分割槽 基於行複製以及...

MySQL的執行原理

mysql分為服務端和客戶端,mysql客戶端和服務端都代表乙個計算機程序,擁有唯一的程序pid,mysql伺服器的程序也被稱為資料庫例項 mysql伺服器在啟動的時候會預設監聽3306埠,採用tcp作為服務端與客戶端之間的通訊協議。mysql完成客戶端與服務端的連線管理以及查詢語句的解析與優化後,...

mysql的語句執行過程 Mysql語句執行過程

昨天老大問了我個問題,說一條 在低層的時候是怎麼執行的,發生了什麼 首先使用者通過各種鏈結連線到我們的 伺服器 但是這些鏈結需要等待伺服器的空閒程序來處理 所以當伺服器接到一條 後會做很多分解動作 首先在快取裡查詢快取中是否有需要的資料表,如果有並且可以用那麼就不執行後面的動作了,直接返回給使用者 ...