MySQL 架構圖
連接池 Connection Pool
處理來自客戶端的連線與身份驗證,有最大連線數量 (max_connections) 的限制。
// 查詢最大連線數
show variables like '%max_connections%';
// 設定最大連線數
set GLOBAL max_connections = 200;
SQL 介面 SQL Interface
接收來自客戶端的 SQL 指令,分發給對應的元件,等待執行的結果並回傳客戶端。
SQL 指令分類
- DML(Data Manipulation Language),如 UPDATE、DELETE、INSERT
- DDL(Data Definition Language),如 CREATE、ALTER、DROP
- DQL(Data Query Language),如 SELECT
- DCL(Data Control Language),如 GRANT、REVOKE
- TCL(Transaction Control Language),如 COMMIT、ROLLBACK
解析器 Parser
驗證輸入 SQL 指令使否正確,並將指令轉換成一顆樹狀結構的 Parse Tree。
優化器 Optimizer
根據 Parse Tree 產生查詢計畫 (Query Plan),評估所有的查詢,從中選出最好的查詢計畫。
快取 Cache
一個指令成功的執行和回傳後,MySQL 會將指令和執行結果存至快取中,若之後有相同的指令,就可以直接從快取中取得結果。
儲存引擎 Storage Engine
儲存引擎負責所有與磁盤相關的工作,根據來自優化器的查詢計畫從磁盤取出資料。
因為 MySQL 的儲存引擎是可插拔的 (pluggable),而有許多不同的儲存引擎,最常見的是 InnoDB 和 MyISAM。
參考資料
(一)全解MySQL之架构篇:自顶向下深入剖析MySQL整体架构!
MySQL 查詢運作模式. 學習 Tuning 要先知道資料庫怎麼運作 | by (KJH) Kuan-Jung, Huang | Medium