MySQL 基礎架構

2021-10-24 09:16:09 字數 1408 閱讀 8755

大體來說,mysql 可以分為 server 層和儲存引擎層兩部分

儲存引擎:負責資料的儲存和提取,其架構模式是外掛程式式的,支援 innodb、myisam、memory 等多個儲存引擎。從 mysql 5.5.5 起成為 mysql 的預設儲存引擎

聯結器負責和客戶端建立連線、獲取許可權、維持為管理連線

連線命令一般為

mysql -h$ip -p$port -u$user -p
連線命令中的 mysql 是客戶端工具,用來和服務端建立連線。在完成經典的 tcp 握手後,聯結器就開始要認證你的身份,這時候用的就是你輸入使用者名稱和密碼

連線完成後,如果你沒有後續的動作,這個連線就處於空閒狀態,可以在 show processlist 命令中看到它。其中 commoand 列顯示為 sleep 的這一行,就表示現在系統裡面有乙個空閒連線

聯結器自動斷開連線的時候是由引數 wait_timeout 控制的,預設值為 8 小時。

可以通過show variables命令檢視 mysql 系統變數

show variables like 'wait_timeout'
資料庫裡面,長連線是指連線成功後,如果客戶端持續有請求,則一直使用同乙個連線。短連線則是指每次執行完很少的幾次查詢後就斷開連線,下次查詢再重新建立乙個。

建立連線的過程通常是比較複雜的,推薦盡量使用長連線。

但是,全部使用長連線後,有些時候 mysql 記憶體漲得特別快,這是因為 mysql 在執行過程中臨時使用的記憶體是管理在連線物件裡面的。這些資源會在連線斷開時才釋放。所以如果長連線累積下來,可能導致記憶體占用太大,被系統殺掉(oom),從現象上看就是 mysql 異常重啟了。

長連線記憶體占用問題解決方案

不建議使用查詢快取,因為查詢快取的失效非常頻繁,只要對乙個表的更新,這個表上所有的查詢快取都會被清空。

mysql 8.0 版本直接刪掉了整個查詢快取功能。

從分析器開始就真正的執行 sql 語句了,分析器負責對 sql 語句做解析

優化器是在表裡面有多個索引的時候,決定使用哪個索引;或者在乙個語句有多個關聯查詢的時候,決定各個表的連線順序。

mysql 通過分析器知道了你要做什麼,通過優化器知道了該怎麼做,於是就進入了執行器階段,開始執行語句。

開始執行的時候,要先判斷你對要操作的表有沒又許可權,如果沒有,會返回沒有許可權的錯誤,如果有許可權,就開啟表繼續執行。開啟表的時候,執行器會根據表的引擎定義,去使用這個引擎提供的介面。

在資料庫的慢查詢日誌中可以看到乙個 row_examined 字段,表示這個語句執行過程中掃瞄了多少行,這個值是在執行器每次呼叫引擎獲取資料行的時候累加的。

在有些場景下,執行器呼叫一次,在引擎內部掃瞄了多行,因此引擎掃瞄行數和 row_examined 並不是完全相同的。

mysql架構 MySQL的基礎架構

mysql是關聯式資料庫,關聯式資料庫,顧名思義,是建立在關係模型基礎上的資料庫,我們現實世界中的各種實體以及實體之間的各種聯絡一般可用關係模型來表示。經過數十年的發展,關聯式資料庫在理論和工業實踐中都已經發展到很成熟的地步,可以說,目前的絕大部分應用,使用mysql都有成熟的解決方案。資料庫的架構...

MySQL基礎架構

mysql 基本架構示意圖 負責跟客戶端建立連線 獲取許可權 維持和管理連線。平常使用中要盡量使用長連線,但是當全部使用長連線後,mysql占用記憶體會漲的特別快,原因是mysql在執行過程中臨時使用的記憶體是管理在連線 物件裡面的,這些資源會在連線斷開的時候才釋放,大量長連線積累下來會導致記憶體占...

MySQL 基礎架構

mysql 架構分為兩部分,server層與儲存引擎。其中 server 包含 聯結器 查詢快取 分析器 優化器 執行器。儲存引擎架構模式為外掛程式式的,支援 innodb myisam memory 等多個儲存引擎,最常用的是 innodb。建立資料庫連線,驗證使用者名稱密碼是否匹配。讀取使用者許...