1. 程式人生 > 其它 >MySQL系列:架構

MySQL系列:架構

目錄

SQL 執行過程

  1. 首先客戶端傳送請求到服務端,建立連線;
  2. 服務端先看下查詢快取是否命中,命中就直接返回,否則繼續往下執行;
  3. 接著來到解析器,進行語法分析,一些系統關鍵字校驗,校驗語法是否合規;
  4. 然後優化器進行SQL優化,比如怎麼選擇索引之類,然後生成執行計劃;
  5. 最後執行引擎呼叫儲存引擎API查詢資料,返回結果。

MySQL 的架構模式

MySQL 採用的是 C/S 架構(客戶端-伺服器模型)。

客戶端有很多:圖形化介面,命令列,程式碼等。

客戶端會根據指定的 ip、prot 連到伺服器,通過一定的協議來進行 SQL 的執行。這些協議包括最廣泛使用的 TCP 協議,也包括了適用於本地通訊的套接字、共享記憶體、命名管道等。

MySQL 的每一次連線在服務端都有一個專門的執行緒來管理,並且採用的網路 IO 模型是 select/poll,並非 epoll。

主要是因為 select/poll 可移植性好,很多系統都支援。而且 mysql 的瓶頸不在於網路連線上,對於連線數少,並且連線都很活躍的 mysql 而言,select/poll 是更好的選擇。
(注:select、poll、epoll 是 IO 多路複用模型,能同時監聽多個 I/O 事件的狀態,佔用資源少,效能高。)

MySQL 的兩個階段

從 MySQL 的連線生命週期來劃分,當伺服器接收到客戶端的請求連線後,將會進入兩個階段:

  • 連線階段
  • 命令階段

連線階段的主要任務:

  • 確定客戶端和伺服器當前的版本功能
  • 確定是否需要進行 SSL 通訊
  • 服務端進行客戶端的身份認證

連線階段驗證成功後,將會進入命令階段,SQL 操作就是在這個階段執行的。

MySQL 的 3 層架構

從邏輯架構上,MySQL 可以劃分為 3 層:

  • 連線層:主要負責連線池、通訊協議、認證授權等
    • 作為客戶端和服務端的連線,聯結器負責處理和客戶端的連線,還有一些許可權認證之類,比如客戶端通用使用者名稱密碼連線到 MySQL 伺服器,還有對於資料庫表的執行許可權
  • SQL層:得到資料操作的最優解
    • 這一層是 Mysql 的核心層,基本上 MySQL 大部分的核心功能都在這一層,包括查詢快取、解析器、優化器之類,通過這一系列元件進行 SQL 解析、優化、索引選擇、生成執行計劃,最後得到資料操作的最優解
  • 儲存層:負責資料的儲存、檢索
    • MySQL 通過執行引擎直接呼叫儲存引擎API查詢資料庫中資料

SQL 層

當接收到命令後,MySQL 會分析當前 SQL 語句的各種執行效率,進而獲得一個最優的執行計劃。

SQL 層的主要功能:

  • Query cache
    • 快取查詢結果集,並且下次的查詢命中了快取,那麼會跳過後面的執行,直接返回快取結果
  • Parser(解析器)
    • 根據 SQL 語句構建內部使用的解析樹,用於方便獲取 SQL 資訊,如 SQL 的語義和語法資訊
  • Optimizer(優化器)
    • 通過分析儲存引擎的操作成本以及表的統計資訊,輸出高效的執行計劃。比如在查詢分析中,表掃描或索引掃描哪個執行效率高,則選擇哪個

除了上面功能外,MySQL 的內建函式、儲存過程、觸發器、檢視也是在這一層實現的。

儲存層

過優化器會輸出執行計劃,而具體的實施則是在儲存層這一塊。儲存層在 MySQL 這裡設計成了可插播的外掛,也就是說只要符合了標準化介面(API),那麼就可以實現屬於自己的一個儲存引擎。

儲存引擎是用來儲存、檢索資料的,不同的儲存引擎有不同的特性,像 InnoDB 支援事務、外來鍵,而 MyISAM 就不支援。

一般我們不需要關心 SQL 語句會涉及到哪些儲存引擎,只是優化器這一層可能需要根據不同的儲存引擎做出不同的選擇。