mysql體系結構

總的來說,MySQL Server可以看成是二層架構,第一層我們通常叫做 SQL Layer,在 MySQL 數據庫系統處理底層數據之前的所有工作都是在這一層完成的,包括權限判斷,sql 解析,執行計劃優化,query cache 的處理等等;第二層就是存儲引擎層,我們通常叫做 Storage Engine Layer,也就是底層數據存取操作實現部分,由多種存儲引擎共同組成。所以,可以用如下一張最簡單的架構示意圖來表示 MySQL Server的基本架構。該圖載自新浪微博。

實際上每一層中都含有各自的很多小模塊,尤其是第一層 SQL Layer,結構相當複雜的。下面我們就分別針對 SQL Layer 和 Storage Engine Layer 做一個簡單的分析。SQL Layer 中包含了多個子模塊,下面我將逐個做一下簡單的介紹:
1、初始化模塊
顧名思議,初始化模塊就是在 MySQL Server 啓動的時候,對整個系統做各種各樣的初始化操作,比如各種 buffer,cache 結構的初始化和內存空間的申請,各種系統變量的初始
化設定,各種存儲引擎的初始化設置,等等。
2、核心 API
核心 API 模塊主要是爲了提供一些需要非常高效的底層操作功能的優化實現,包括各種底層數據結構的實現,特殊算法的實現,字符串處理,數字處理等,小文件 I/O,格式化輸出,以及最重要的內存管理部分。核心 API 模塊的所有源代碼都集中在 mysys 和 strings文件夾下面,有興趣的讀者可以研究研究。
3、網絡交互模塊
底層網絡交互模塊抽象出底層網絡交互所使用的接口 api,實現底層網絡數據的接收與發送,以方便其他各個模塊調用,以及對這一部分的維護。所有源碼都在 vio 文件夾下面。
4、Client & Server 交互協議模塊
任何 C/S 結構的軟件系統,都肯定會有自己獨有的信息交互協議,MySQL 也不例外。MySQL的 Client & Server 交互協議模塊部分,實現了客戶端與 MySQL 交互過程中的所有協議。當然這些協議都是建立在現有的 OS 和網絡協議之上的,如 TCP/IP 以及 Unix Socket。
5、用戶模塊
用戶模塊所實現的功能,主要包括用戶的登錄連接權限控制和用戶的授權管理。他就像6、訪問控制模塊造訪客人進門了就可以想幹嘛就幹嘛麼?爲了安全考慮,肯定不能如此隨意。這時候就需要訪問控制模塊實時監控客人的每一個動作,給不同的客人以不同的權限。訪問控制模塊實現的功能就是根據用戶模塊中各用戶的授權信息,以及數據庫自身特有的各種約束,來控制用戶對數據的訪問。用戶模塊和訪問控制模塊兩者結合起來,組成了 MySQL 整個數據庫系統的權限安全管理的功能。
7、連接管理、連接線程和線程管理
連接管理模塊負責監聽對 MySQL Server 的各種請求,接收連接請求,轉發所有連接請求到線程管理模塊。每一個連接上 MySQL Server 的客戶端請求都會被分配(或創建)一個連接線程爲其單獨服務。而連接線程的主要工作就是負責 MySQL Server 與客戶端的通信,接受客戶端的命令請求,傳遞 Server 端的結果信息等。線程管理模塊則負責管理維護這些連接線程。包括線程的創建,線程的 cache 等。
8、Query 解析和轉發模塊
在 MySQL 中我們習慣將所有 Client 端發送給 Server 端的命令都稱爲 query,在 MySQLServer 裏面,連接線程接收到客戶端的一個 Query 後,會直接將該 query 傳遞給專門負責將各種 Query 進行分類然後轉發給各個對應的處理模塊,這個模塊就是 query 解析和轉發模塊。其主要工作就是將 query 語句進行語義和語法的分析,然後按照不同的操作類型進行分類,然後做出針對性的轉發。
9、Query Cache 模塊
Query Cache 模塊在 MySQL 中是一個非常重要的模塊,他的主要功能是將客戶端提交給MySQL 的 Select 類 query 請求的返回結果集 cache 到內存中,與該 query 的一個 hash 值做一個對應。該 Query 所取數據的基表發生任何數據的變化之後,MySQL 會自動使該 query 的Cache 失效。在讀寫比例非常高的應用系統中,Query Cache 對性能的提高是非常顯著的。當然它對內存的消耗也是非常大的。
10、Query 優化器模塊
Query 優化器,顧名思義,就是優化客戶端請求的 query,根據客戶端請求的 query 語句,和數據庫中的一些統計信息,在一系列算法的基礎上進行分析,得出一個最優的策略,告訴後面的程序如何取得這個 query 語句的結果。
11、表變更管理模塊
表變更管理模塊主要是負責完成一些 DML 和 DDL 的 query,如 :update,delte,insert,create table,alter table 等語句的處理。
12、表維護模塊
表的狀態檢查,錯誤修復,以及優化和分析等工作都是表維護模塊需要做的事情。
13、系統狀態管理模塊
系統狀態管理模塊負責在客戶端請求系統狀態的時候,將各種狀態數據返回給用戶,像DBA 常用的各種 show status 命令,show variables 命令等,所得到的結果都是由這個模塊返回的。

14、表管理器

這個模塊從名字上看來很容易和上面的表變更和表維護模塊相混淆,但是其功能與變更及維護模塊卻完全不同。大家知道,每一個 MySQL 的表都有一個表的定義文件,也就是*.frm文件。表管理器的工作主要就是維護這些文件,以及一個 cache,該 cache 中的主要內容是各個表的結構信息。此外它還維護 table 級別的鎖管理。
15、日誌記錄模塊
日誌記錄模塊主要負責整個系統級別的邏輯層的日誌的記錄,包括 error log,binarylog,slow query log 等。
16、複製模塊
複製模塊又可分爲 Master 模塊和 Slave 模塊兩部分, Master 模塊主要負責在Replication 環境中讀取 Master 端的 binary 日誌,以及與 Slave 端的 I/O 線程交互等工作 。
Slave 模塊比 Master 模塊所要做的事情稍多一些,在系統中主要體現在兩個線程上面。一個是負責從 Master 請求和接受 binary 日誌,並寫入本地 relay log 中的 I/O 線程。另外一個是負責從 relay log 中讀取相關日誌事件,然後解析成可以在 Slave 端正確執行並得到和Master 端完全相同的結果的命令並再交給 Slave 執行的 SQL 線程。
17、存儲引擎接口模塊
存儲引擎接口模塊可以說是 MySQL 數據庫中最有特色的一點了。目前各種數據庫產品中,基本上只有 MySQL 可以實現其底層數據存儲引擎的插件式管理。這個模塊實際上只是一個抽象類,但正是因爲它成功地將各種數據處理高度抽象化,才成就了今天 MySQL 可插拔存儲引擎的特色。

注:本文文字摘自《MySQL性能調優與架構設計》一 書

發佈了15 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章