一 MySQL體系結構

2021-10-24 18:38:25 字數 1937 閱讀 2571

本章目標:

在資料庫領域裡很常見的兩個詞:「資料庫」和「資料庫例項」。

mysql被設計成單程序多執行緒架構的資料庫。當啟動例項時,mysql會先去讀取配置檔案,然後根據配置檔案引數來啟動資料庫例項。配置檔案中datadir引數指定了資料庫所在的路徑。

mysql使用客戶端/伺服器(client/server)結構,邏輯結構圖如下所示:

mysql 體系結構大體可以分為三層:客戶端、伺服器層以及儲存引擎層。

元件說明:

mysql server的執行主要分為建立連線、查詢快取、解析器、查詢優化器、執行引擎五個部分。

建立連線

通過客戶端/伺服器通訊協議與mysql建立連線。mysql 客戶端與服務端的通訊方式是「 半雙工 」。對於每乙個 mysql 的連線,時刻都有乙個執行緒狀態來標識這個連線正在做什麼。使用命令「show processlist;」可以查詢執行緒狀態。

查詢快取

如果開啟了查詢快取且在查詢快取過程中查詢到完全相同的sql語句,伺服器不必進行查詢解析、優化和執行的過程,直接返回快取中的結果集。

解析器與預處理器

mysql會解析查詢,並建立了乙個內部資料結構(解析樹)。這個過程解析器主要通過語法規則來驗證和解析。比如sql中是否使用了錯誤的關鍵字或者關鍵字的順序是否正確等等。預處理會根據mysql的規則進一步檢查解析樹是否合法。比如要查詢的資料表和資料列是否存在等。

查詢優化器

優化器將其轉化成查詢計畫。多數情況下,一條查詢可以有很多種執行方式,最後都返回相應的結果。優化器的作用就是找到這其中最好的執行計畫。優化器並不關心使用的什麼儲存引擎,但是儲存引擎對優化查詢是有影響的。優化器要求儲存引擎提供容量或某個具體操作的開銷資訊來評估執行時間。

查詢執行引擎

查詢執行引擎會根據 sql 語句中表的儲存引擎型別,以及對應的api介面與底層儲存引擎快取或者物理檔案的互動,得到查詢結果並返回給客戶端。若開啟用查詢快取,這時會將sql 語句和結果完整地儲存到查詢快取(cache&buffer)中,以後若有相同的 sql 語句執行則直接返回結果。

外掛程式式儲存引擎是mysql的一大特點體系結構,每個儲存引擎都提供了各自的功能,可以根據業務或者應用場景為資料表選擇不同的儲存引擎。此外,鑑於mysql的開源特性,我們可以根據儲存引擎介面開發自己的儲存引擎或者通過修改原始碼實現新的特性。

使用「show engines;」命令可以檢視當前mysql支援的儲存引擎。mysql有許多種類的儲存引擎供我們選擇,如innodb、myisam、ndb、memory、archive、federated、maria、csv、blackhole、merge、example,但目前常用的儲存引擎為innodb和myisam。mysql 5.5 之後,預設的儲存引擎是 innodb。

innodb儲存引擎支援事務。其特點是行鎖設計、支援外來鍵、支援非鎖定讀。

innodb的儲存檔案有兩個,字尾名分別是 .frm 和 .idb,其中 .frm 是表的定義檔案,而 idb 是資料檔案。innodb中存在表鎖和行鎖,不過行鎖是在命中索引的情況下才會起作用。innodb 支援事務,且支援四種隔離級別(讀未提交、讀已提交、可重複讀、序列化),預設的為可重複讀。

myisam只支援表鎖,不支援事務。

myisam的儲存檔案有三個,字尾名分別是 .frm、.myd、myi,其中.frm是表的定義檔案,.myd 是資料檔案,.myi 是索引檔案。myisam由於有單獨的索引檔案,在讀取資料方面的效能很高。myisam是以堆結構進行組織資料,其表容易損壞。

關於更多mysql儲存引擎的知識,後續會有專門的章節深入分析。

本節多為介紹性內容,通過對mysql邏輯結構、執行機制、儲存引擎等的了解,將對後續深入理解mysql有極大幫助。

mysql 體系結構 了解MySQL體系結構

mysql 資料庫體系結構圖 mysql 由以下幾部分組成 1 connectors 不同語言中與 sql 的互動 show variables like connection variable name value character set connection utf8 collation c...

簡述mysql體系結構 MySQL體系結構

一 mysql登入方式 一 tcp ip方式 遠端 本地 mysql uroot poldboy123 h 10.0.0.51 p3306 二 socket方式 mysql uroot poldboy123 s tmp mysql.sock 二 例項介紹 例項 mysqld後台守護程序 主線程 ma...

MySQL體系結構 一

資料庫 資料庫檔案 是乙個或者一組二進位制檔案,通常來說存在與檔案系統之上。由資料庫後台程序 執行緒以及乙個共享區域組成 程式的概念 資料庫例項是用來運算元據庫檔案的 注意 mysql中,資料庫例項和資料庫是一一對應的。沒有oracle的一對多 rac 的機制。單程序多執行緒結構 儲存引擎的概念 體...