MySQL學習筆記(一)基礎架構

2021-09-21 18:16:02 字數 2374 閱讀 9026

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

server 層包括聯結器、查詢快取、分析器、優化器、執行器等,涵蓋mysql大多數核心服務功能,以及所有內建函式(如日期、時間、數學和加密函式等),所有跨儲存引擎的功能都在這一層實現,比如儲存過程、觸發器、檢視等等。

而儲存引擎層負責資料的儲存和提取。其架構模式是外掛程式式的,支援innodb、myisam、memory等多個儲存引擎。現在最常用的儲存引擎是innodb,預設儲存引擎。

create table建表,預設使用innodb。不同引擎的表資料訪問方式不同,支援的功能也不同。

不同的儲存引擎共用乙個server層

聯結器

首先會連線資料庫。聯結器負責和客戶端建立連線、獲取許可權、維持和管理連線。

mysql -h$ip -p$port -u$user -p

連線命令中的 mysql 是客戶端工具,用來跟服務端建立連線。完成tcp握手後,聯結器就要開始認證身份,這個時候就是你輸入的使用者名稱和密碼。認證通過後,聯結器會到許可權表裡面查出你擁有的許可權。

長連線指連線成功後,如果客戶端持續有請求,則一直使用同乙個連線。短連線指每次執行完很少的幾次查詢就斷開連線,下次查詢再重新建立乙個。(所以盡量使用長連線)

長連線累積下來可能導致記憶體占用太大,mysql在執行過程中臨時使用的記憶體是管理在連線物件裡面的,這些資源在連線斷開的時候才釋放。記憶體太大,被系統強行殺掉(oom),從現象看就是mysql異常重啟。

解決的方案:

1. 定期斷開長連線。或者執行乙個占用記憶體的大查詢後,斷開連線,之後要查詢再重連。

2.如果版本新,可以在每次執行完大操作後,通過執行mysql_reset_connection重新初始化連線資源。這個不需要重連,會將連線恢復到剛剛建立完時的狀態。

查詢快取

連線建立完後就可以執行select語句了。

mysql拿到查詢請求後會先到查詢快取看看之前是否執行過這條語句,若執行過,則將結果以key-value對的形式,直接快取到記憶體中。

若不在查詢快取中,就會繼續執行階段。執行完成後,執行結果會被存入查詢快取中。

但是大多數時候不要用查詢快取,因為弊大於利

失效非常頻繁。因為只要對乙個表有更新,查詢快取就會被清空。對於更新壓力大的資料庫,查詢快取的命中率會非常低。如果業務是一張靜態表,才比較適合。(比如系統配置表)

將引數query_cache_type設定成demand,這樣預設不使用查詢快取。對於想使用查詢快取的語句,可以用sql_cache顯式指定。

mysql> select sql_cache * from t where id=10;

8.0後徹底刪掉查詢快取這個功能。。。艹

分析器

沒有命中查詢快取,就執行。

首先「詞法分析」。mysql 從你輸入的"select"這個關鍵字識別出來,這是乙個查詢語句。也要把字串「t」識別成「表名t」,把字串「id」識別成「列id」。

然後「語法分析」。判斷是否符合語法。

優化器

分析完了後,在開始執行前,要經過優化器。

在表裡有多個索引的時候決定使用哪個索引;或者在乙個語句有多表關聯(join)的時候,決定各個表的連線順序。

如:mysql> select * from t1 join t2 using(id)  where t1.c=10 and t2.d=20;

既可以先從表t1裡面取出c=10的記錄的id值,再根據id關聯到表t2,再判斷t2裡面d的值是否=20

也可先從t2裡面取出d=20的記錄的id值,再根據id值關聯到t1,再判斷t1裡面c的值是否等於10;

兩種方案邏輯一樣但是執行效率不同,優化器的作用就是決定選擇哪乙個方案。

執行器

執行語句。

執行的時候會判斷你對這個表t有沒有執行查詢的許可權,如果沒有就會返回沒有許可權的錯誤。

有許可權,就開啟表。根據表的引擎定義,去使用這個引擎提供的介面。

mysql> select * from t where id=10;

例如:這個表t中,id欄位沒有索引,那麼:

1、呼叫innodb引擎介面取這個表的第一行,判斷id是不是10,如果不是就跳過,如果是則將這行存在結果集中。

2、呼叫引擎介面取「下一行」,重複相同邏輯,直到取到最後一行。

3、執行器將上述滿足條件的行作為結果集返回客戶端。

MySQL學習筆記(一) MySQL基礎架構

mysql可分為server層和儲存引擎層兩部分 1.1 server層 聯結器 許可權驗證 盡量使用長連線,但是長連線會消耗記憶體,可以定時清理,也可以重新初始化鏈結資源 查快取 一般不用,除非讀多寫少 8.0移除 分析器 詞法分析,語法分析,語法解析 優化器 使用哪個索引 表連線順序 執行器 執...

MySql學習(一)mysql基礎架構

可插拔式儲存引擎 檔案系統 客戶端負責發出sql 結構化查詢語言 負責對sql進行進一步處理 management services utillties 了解 提供一些管理工具 connection pool 了解 管理使用者連線,包括下面幾個元件 authentication 授權管理 threa...

Mysql學習專欄之一(Mysql基礎架構)

mysql 可以分為server 層和儲存引擎層兩部分,如下圖所示 server 層包括聯結器 查詢快取 分析器 優化器 執行器等,涵蓋 mysql 的大多數核心服務功能,以及所有的內建函式 如日期 時間 數學和加密函式等 所有跨儲存引擎的功能都在這一層實現,比如儲存過程 觸發器 檢視等。而儲存引擎...