標籤:程式 儲存引擎 概念 檔案系統 語句 分配 實現 系統管 架構
一、邏輯架構
MySQL也採用分層架構。外掛程式式的儲存引擎架構將查詢處理和其他的系統任務以及資料的存取相分離,這樣就可以根據業務需求來選擇適合的儲存引擎。
1、階層
串連層 —— 商務邏輯處理層(處理sql)—— 資料存放區引擎 —— 硬碟
(1)串連層
是一些用戶端和串連服務,主要完成類似於串連處理、授權認證、及相關的安全方案。該層引入了串連池的概念,為通過認證安全接入的用戶端提供線程。該層還可實現基於SSL的安全連結。
(2)服務層
在處理底層資料前,在這一層對SQL進行分析、最佳化及執行內建函數,會確定查詢表的順序和是否利用索引等,最後產生相應的執行操作。在解析查詢之前,要查詢快取,這個緩衝只能儲存查詢資訊以及結果資料,如果請求一個查詢在緩衝中存在,就不需要解析,最佳化和執行查詢了,直接返回緩衝中所存放的這個查詢的結果。各個儲存引擎提供的功能都集中在這一層,如預存程序,觸發器,視圖等。
(3)引擎層
儲存引擎真正的負責了Mysql中資料的儲存和提取,伺服器通過儲存引擎API與儲存引擎互動,API包含了很多底層操作,如開始一個事務,或者取出有特定主鍵的行。儲存引擎不能解析SQL,互相之間也不能通訊,僅僅是簡單的響應伺服器的請求。
(4)儲存層
主要將資料存放區在運行於裸裝置的檔案系統之上,並完成與儲存引擎的互動。
2、邏輯模組
(1)Connectors:指的是不同語言中與SQL的互動。
(2)Management Serveices & Utilities:系統管理和控制工具。
(3)Connection Pool:串連池
管理緩衝使用者串連,線程處理等需要緩衝的需求。負責監聽對 MySQL Server 的各種請求,接收串連請求,轉寄所有串連請求到線程管理模組。每一個串連上 MySQL Server 的用戶端請求都會被分配(或建立)一個連接線程為其單獨服務。而連接線程的主要工作就是負責 MySQL Server 與用戶端的通訊,接受用戶端的命令請求,傳遞 Server 端的結果資訊等。線程管理模組則負責管理維護這些連接線程。包括線程的建立,線程的 cache 等。
(4)SQL Interface: SQL介面。
接受使用者的SQL命令,並且返回使用者需要查詢的結果。比如select from就是調用SQL Interface。
(5)Parser: 解析器。
SQL命令傳遞到解析器的時候會被解析器驗證和解析。在 MySQL中我們習慣將所有 Client 端發送給 Server 端的命令都稱為 query 。
主要功能:
a . 將SQL語句進行語義和文法的分析,分解成資料結構,然後按照不同的操作類型進行分類,然後做出針對性的轉寄到後續步驟,以後SQL語句的傳遞和處理就是基於這個結構的。
b. 如果在分解構成中遇到錯誤,那麼就說明這個sql語句是不合理的。
(6)Optimizer:查詢最佳化工具。
SQL語句在查詢之前會使用查詢最佳化工具對查詢進行最佳化,得出一個最優的策略,告訴後面的程式如何取得這個 query 語句的結果,他使用的是“選取-投影-聯結”策略進行查詢。
(7)Cache和Buffer: 查詢快取。
將用戶端提交給MySQL的Select類query請求的返回結果集cache到記憶體中,與該query的一個hash值做一個對應。該Query 所取資料的基表發生任何資料的變化之後,MySQL會自動使該query的Cache失效。在讀寫比例非常高的應用系統中,Query Cache對效能的提高是非常顯著的。當然它對記憶體的消耗也是非常大的。如果查詢快取有命中的查詢結果,查詢語句就可以直接去查詢快取中取資料。這個緩衝機制是由一系列小緩衝組成的。比如表緩衝,記錄緩衝,key緩衝,許可權緩衝等。
(8) 儲存引擎介面
外掛程式式管理,目前各種資料庫產品中,基本上只有 MySQL 可以實現其底層資料存放區引擎的外掛程式式管理,這個模組實際上只是 一個抽象類別。預設下MySql是使用MyISAM引擎,它查詢速度快,有較好的索引最佳化和資料壓縮技術,但是它不支援事務,InnoDB支援事務,並且提供行級鎖,應用也相當廣泛,Mysql也支援自己定製儲存引擎。
注意:儲存引擎是基於表的,而不是資料庫,甚至一個庫中不同的表使用不同的儲存引擎。
二、儲存引擎
查看預設和當前的儲存引擎:show variables like ‘%storage_engine%;
可參考: https://www.cnblogs.com/kerrycode/p/6571868.html
MyISAM和InnoDB比較
參考連結:https://www.cnblogs.com/zcbing/p/6397507.html
MySQL最佳化(1):Mysql架構