Mysql邏輯架構
這個圖相信大家并不陌生,這個就是mysql的邏輯結構圖下面是主包讓AI生成的翻譯后的邏輯結構圖:
我們先來看看各個部分的作用是什么
第一層:客戶端連接層 (Client Layer)
這一層負責處理所有客戶端連接到服務器的請求。責任就是:
- 身份認證:驗證用戶名、密碼、主機權限等。
- 安全管理:檢查用戶是否有執行某個操作的權限。
- 連接管理:管理連接的線程(如線程緩存
thread_cache_size
),處理SHOW PROCESSLIST
等命令。 - 如果連接校驗通過,服務器會為該連接分配一個線程,后續該客戶端的請求均在這個線程中進行。
這一層的內容還是很好理解的就是我們熟知的連接池。
第二層:核心服務層 (Server Layer / SQL Layer)
這是MySQL的“大腦”,負責處理SQL語句的解析、優化和執行。?這一層是跨存儲引擎的,意味著不管底層用什么存儲引擎,SQL語句都會在這里經過相同的處理流程。
1.SQL接口 (SQL Interface)??
?職責?就是接收客戶端發送的SQL命令(如DML、DDL、存儲過程、視圖等),并返回處理結果,相當于一個指揮官,接收命令并決定下一步交給誰處理。
2.解析器 (Parser)??
?職責?就是對SQL語句進行詞法分析和語法分析。將完整的SQL語句拆分成一個個的單詞(SELECT
, *
, FROM
, t
)。根據語法規則,判斷SQL語句是否合法,最終生成一個解析樹?(或語法樹)。比如它會檢查你是否把WHERE
寫成了WHER
。
3.優化器 (Optimizer)??
?這是最復雜的組件之一,它的任務是對解析器生成的解析樹進行優化。如使用哪個索引或全表掃描?多表關聯順序?:(A JOIN B) JOIN C
還是 A JOIN (B JOIN C)
?子查詢優化?:將某些子查詢轉化為更高效的JOIN
操作。最終產生一個它認為成本最低(cost-based
)的執行計劃。你可以使用EXPLAIN
命令來查看優化器生成的執行計劃。
4.查詢緩存 (Query Cache) (MySQL 8.0中已移除)??
在8.0之前的版本,如果查詢語句和數據完全一致,會直接從緩存返回結果。但由于其嚴重的瓶頸問題(任何表有更新,該表的所有查詢緩存都會失效),在MySQL 8.0中這個功能被徹底移除了。
5.緩存和緩沖 (Caches & Buffers)??
這里指的是各種全局的緩存,如表緩存、權限緩存等。InnoDB
存儲引擎自己的緩沖池(Buffer Pool
)不屬于這一層,而是屬于存儲引擎層。
6.系統管理和控制工具(System Management & Control Tools)
是MySQL服務器的全局管理員和大腦,負責制定規則、監控全局狀態、進行后臺維護。作用如下:
1.?制定全局規則與策略?:定義整個MySQL實例的安全策略,即所有用戶的權限信息最終存儲在 mysql.user
、mysql.db
等系統表中。設置全局系統變量(如 max_connections
最大連接數、innodb_buffer_pool_size
緩沖池大小)。
2.資源調度與全局監控?:監控整個服務器的健康狀態(CPU、內存、IO使用情況)。管理全局性的資源,如緩存(查詢緩存、表緩存)、線程池的整體狀態。記錄全局性的日志,如錯誤日志(Error Log)、慢查詢日志(Slow Query Log)、二進制日志(Binlog)。這些日志記錄的是所有連接的行為。
3.后臺維護與自治?:執行定期任務,如刷新緩存、更新統計信息、日志輪轉(Log Rotation)。負責表的自動修復、崩潰恢復等。
而連接池就是調用了系統管理工具和控制工具進行鑒權等一系列操作。
第三層:存儲引擎層 (Storage Engine Layer)
存儲引擎負責數據的存儲和提取。MySQL的核心服務層通過定義好的API與存儲引擎進行交互。?這種設計使得存儲引擎是“可插拔”的,你可以根據需要為不同的表選擇不同的存儲引擎。
這個就是最好sql執行到存儲引擎,然后存儲引擎再通過API去訪問文件系統,最最后再把結果放回。
下面這個是主包從其他博主拿過來的圖,對于邏輯架構的文章要比主包寫的好很多https://www.cnblogs.com/binliubiao/p/15230069.html大家可以去仔細看看,內容還是很多的。
總結
這一篇主要講的就邏輯架構,但是這一篇主包承認比較水,很多都是Ai生成的,因為主包認為這一篇的內容不是很難(皮毛的話)。