1. 程式人生 > 實用技巧 >MySQL架構體系介紹

MySQL架構體系介紹

一、MySQL的完整架構體系

MySQL完整的架構體系:

  • Connectors:指的是不同語言中與SQL的互動。
  • Connection Pool :管理緩衝使用者連線,執行緒處理等需要快取的需求。負責監聽對 MySQL Server 的各種請求,接收連線請求,轉發所有連線請求到執行緒管理模組。每一個連線上 MySQL Server 的客戶端請求都會被分配(或建立)一個連線執行緒為其單獨服務。而連線執行緒的主要工作就是負責 MySQL Server 與客戶端的通訊,接受客戶端的命令請求,傳遞 Server 端的結果資訊等。執行緒管理模組則負責管理維護這些連線執行緒。包括執行緒的建立,執行緒的 cache 等。
  • Management Serveices & Utilities :系統管理和控制工具。
  • SQL Interface :接受使用者的SQL命令,並且返回使用者需要查詢的結果。
  • Parser :SQL命令傳遞到解析器的時候會被解析器驗證和解析。解析器是由Lex和YACC實現的,是一個很長的指令碼。在 MySQL中我們習慣將所有 Client 端傳送給 Server 端的命令都稱為 query ,在 MySQL Server 裡面,連線執行緒接收到客戶端的一個 Query 後,會直接將該 query 傳遞給專門負責將各種 Query 進行分類然後轉發給各個對應的處理模組。
    • 將SQL語句進行語義和語法的分析,分解成資料結構,然後按照不同的操作型別進行分類,然後做出針對性的轉發到後續步驟,以後SQL語句的傳遞和處理就是基於這個結構的;
    • 如果在分解構成中遇到錯誤,那麼就說明這個sql語句是不合理的。
  • Optimizer:查詢優化器:SQL語句在查詢之前會使用查詢優化器對查詢進行優化。就是優化客戶端請求query,根據客戶端請求的 query 語句,和資料庫中的一些統計資訊,在一系列演算法的基礎上進行分析,得出一個最優的策略,告訴後面的程式如何取得這個 query 語句的結果。
  • Cache和Buffer :查詢快取:主要功能是將客戶端提交 給MySQL 的 Select 類 query 請求的返回結果集 cache 到記憶體中,與該 query 的一個 hash 值 做一個對應。該 query 所取資料的基表發生任何資料的變化之後, MySQL 會自動使該 query 的Cache 失效。在讀寫比例非常高的應用系統中, Query Cache 對效能的提高是非常顯著的。當然它對記憶體的消耗也是非常大的。如果查詢快取有命中的查詢結果,查詢語句就可以直接去查詢快取中取資料。這個快取機制是由一系列小快取組成的。比如表快取,記錄快取,
    key快取,許可權快取等。
  • 儲存引擎介面 :MySQL區別於其他資料庫的最重要的特點就是其外掛式的表儲存引擎。MySQL外掛式的儲存引擎架構提供了一系列標準的管理和服務支援,這些標準與儲存引擎本身無關,可能是每個資料庫系統本身都必需的,如SQL分析器和優化器等,而儲存引擎是底層物理結構的實現,每個儲存引擎開發者都可以按照自己的意願來進行開發。
    注意:儲存引擎是基於表的,而不是資料庫。

總共分為三層

上述三層也可巨集觀的按下面這個圖進行分類:

Mysql中最核心的是儲存層,目前最流行的是INNODB,接下來看下INNODB的結構:

二、MySQL邏輯架構

  • Client :
    提供連線MySQL伺服器功能的常用工具集
  • Server :
    MySQL例項,真正提供資料儲存和資料處理功能的MySQL伺服器程序
  • mysqld:
    MySQL伺服器守護程式,在後臺執行。它管理著客戶端請求。mysqld是一個多執行緒的程序,允許多個會話連線,埠監聽連線,管理MySQL例項
  • MySQL memory allocation:
    MySQL的要求的記憶體空間是動態的,比如innodb_buffer_pool_size (from 5.7.5), key_buffer_size。每個會話都有獨一無二的執行計劃,我們只能共享同一會話域內的資料集。
  • SESSION
    為每個客戶端連線分配一個會話,動態分配和回收。用於查詢處理,每個會話同時具備一個緩衝區。每個會話是作為一個執行緒執行的
  • Parser
    檢測SQL語句語法,為每條SQL語句生成SQL_ID,使用者認證也發生在這個階段
  • Optimizer
    創造一個有效率的執行計劃(根據具體的儲存引擎)。它將會重寫查詢語句。比如:InnoDB有共享緩衝區,所以,優化器會首先從預先快取的資料中提取。使用 table statistics optimizer將會為SQL查詢生成一個執行計劃。使用者許可權檢查也發生在這個階段。
  • Metadata cache
    快取物件元資訊和統計資訊
  • Query cache
    共享在記憶體中的完全一樣的查詢語句。如果完全相同的查詢在快取命中,MySQL伺服器會直接從快取中去檢索結果。快取是會話間共享的,所以為一個客戶生成的結果集也能為另一個客戶所用。查詢快取基於SQL_ID。將SELECT語句寫入檢視就是查詢快取最好的例子。
  • key cache
    快取表索引。MySQL keys是索引。如果索引資料量小,它將快取索引結構和葉子節點(儲存索引資料)。如果索引很大,它只會快取索引結構,通常供MyISAM儲存引擎使用