這裏分爲三層:
1.鏈接層:鏈接與線程處理,這一層並非MySQL獨有,通常的基於C/S架構的都有相似組件,好比鏈接處理、受權認證、安全等。
2.SQL處理層:也叫MySQL服務器層,包括緩存查詢、解析器、優化器,這一部分是MySQL核心功能,包括解析、優化SQL語句,查詢緩存目錄,內置函數(日期、時間、加密等函數)的實現
3.數據存儲層:也叫存儲引擎層,負責數據存儲,存儲引擎的不一樣,存儲方式、數據格式、提取方式等都不相同,這一部分也是很大影響數據存儲與提取的性能的。可是,與分層的思想一致,SQL處理層是經過API與存儲引擎通訊的,API屏蔽了下層的差別,下層提供對外接口,上層負責調用便可,沒必要清楚下層是怎麼實現的。php
客戶端說明:MySQL是基於C/S架構的,這裏的客戶端天然是專門的,能訪問到MySQL服務器的,主要有這麼幾類,操做客戶端:單純的操做MySQL服務器中的數據(這裏數據包括庫、表、索引、表中數據等),好比經常使用的native、phpMyAdmin、Sequal Pro等;應用客戶端:應用程序經過程序訪問數據庫,好比JDBC、ODBC、PHP程序、python程序等。無論是哪一種,其實最後都轉換爲SQL語句訪問MySQL。html
當MySQL啓動(MySQL服務器就是一個進程),等待客戶端鏈接,每個客戶端鏈接請求,服務器都會新建一個線程處理(若是是線程池的話,則是分配一個空的線程),每一個線程獨立,擁有各自的內存處理空間,可是,若是這個請求只是查詢,不要緊,可是如果修改數據,很顯然,當兩個線程修改同一塊內存是會引起數據同步問題的。
>鏈接處理流程python
鏈接到服務器,服務器須要對其進行驗證,也就是用戶名、IP、密碼驗證,一旦鏈接成功,還要驗證是否具備執行某個特定查詢的權限(例如,是否容許客戶端對某個數據庫某個表的某個操做)。
>認證流程mysql
這一層主要功能有:SQL語句的解析、優化,緩存的查詢,MySQL內置函數的實現,跨存儲引擎功能(所謂跨存儲引擎就是說每一個引擎都需提供的功能(引擎需對外提供接口)),例如:存儲過程、觸發器、視圖等。git
>執行過程:程序員
(圖中的查詢並非必定是select語句,在MySQL中,通常習慣把每一條SQL命令稱爲query(查詢))算法
1.若是是查詢語句(select語句),首先會查詢緩存是否已有相應結果,有則返回結果,無則進行下一步(若是不是查詢語句,一樣調到下一步);
2.解析查詢,建立一個內部數據結構(解析樹),這個解析樹主要用來SQL語句的語義與語法解析;詳情可查看:MySQL解析器。
3.優化:優化SQL語句,例如重寫查詢,決定表的讀取順序,以及選擇須要的索引等。這一階段用戶是能夠查詢的,查詢服務器優化器是如何進行優化的,便於用戶重構查詢和修改相關配置,達到最優化。這一階段還涉及到存儲引擎,優化器會詢問存儲引擎,好比某個操做的開銷信息、是否對特定索引有查詢優化等。詳情可查看:MySQL優化器。sql
存儲引擎,也稱爲表類型,主要用來存儲數據的,不一樣的存儲引擎採用不一樣的技術(存儲機制、索引機制、鎖定機制)存儲數據,這主要是爲了知足數據存儲要求,好比有的數據不須要大量的改動,只用來查詢,而有的數據則須要經常修改(數據插入、刪除、更新),針對各類業務狀況,爲了更好的數據處理效率採用不一樣的數據存儲技術(即不一樣存儲引擎)。
MySQL的存儲引擎是插件式的,也就是說,用戶能夠隨時切換MySQL的存儲引擎:針對表或針對庫均可(經過SQL語句命令)。這種靈活性也是爲何MySQL受到歡迎的一個重要緣由。MySQL集合了多種引擎:MyISAM、InnoDB、BDB、Merge、Memory等,默認的是InnoDB(MySQL5.5開始,之前是MyISAM)。數據庫
如下主要參考文章:MySQL架構(guisu)。
以上組件是對邏輯架構的實現:
1.Management Services & Utilities
服務管理和控制組件,主要用來回滾操做、恢復數據、數據的複製、遷移、元數據的管理等。
2.Connection Pool:鏈接池
鏈接池,對應邏輯架構的鏈接層,主要用來管理用戶鏈接,包括監聽、接收客戶端請求,轉發請求到相應的線程管理模塊(該模塊負責維護這些線程,包括建立、線程cache,可有線程池實現),還有鏈接的權限認證工做。
3.SQL Interface:SQL接口
各類SQL接口,用來接收管理SQL命令,好比DML、DDL操做,存儲過程,視圖,觸發器等。
4.Parser:解析器
SQL命令傳遞到解析器的時候會被解析器驗證和解析。解析器是由Lex和YACC實現的,是一個很長的腳本。
主要功能:
a . 將SQL語句進行語義和語法的分析,分解成數據結構,而後按照不一樣的操做類型進行分類,而後作出針對性的轉發到後續步驟,之後SQL語句的傳遞和處理就是基於這個結構的。
b. 若是在分解構成中遇到錯誤,那麼就說明這個sql語句是不合理的。
5.Optimizer: 查詢優化器
優化SQL語句,好比常量轉換與計算、無效代碼排除、AND/OR等等優化。查詢優化器必要的時候還會詢問存儲引擎,計算語句執行消耗,從而得出最優策略去執行該SQL命令。
6.Cache & Buffer: 查詢緩存
他的主要功能是將客戶端提交 給MySQL 的 Select 類 query 請求的返回結果集 cache 到內存中,與該 query 的一個 hash 值 作一個對應。該 Query 所取數據的基表發生任何數據的變化以後, MySQL 會自動使該 query 的Cache 失效。在讀寫比例很是高的應用系統中, Query Cache 對性能的提升是很是顯著的。固然它對內存的消耗也是很是大的。
若是查詢緩存有命中的查詢結果,查詢語句就能夠直接去查詢緩存中取數據。這個緩存機制是由一系列小緩存組成的。好比表緩存,記錄緩存,key緩存,權限緩存等
7.存儲引擎
目前只有MySQL實現了插件式多存儲引擎(加了一層抽象層對接下面的存儲數據層),其餘數據庫基本上使用單一的存儲引擎。MySQL的存儲引擎是基於表的,每一個表可選擇本身須要的存儲引擎。編程