1. 程式人生 > 其它 >0、MySQL基礎架構

0、MySQL基礎架構

MySQL基礎架構

Server層

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

儲存引擎層

儲存引擎層負責資料的儲存和提起。最常用儲存引擎是InnoDB,MySQL 5.5.5以後的預設儲存引擎。不同儲存引擎公用一個Server層。

Server層元件

聯結器

聯結器負責跟客戶端建立連線,獲取許可權、維持和管理連線。當用戶名密碼驗證通過後,聯結器會到許可權表中查出所擁有的許可權,如果此時管理員對許可權做了修改,也不會影響當前連線的許可權,除非斷開連線重連。Mysql會自動斷開長時間空閒連線,預設8小時(wait_timeout設定)。
由於資料庫建立連線比較複雜,所以在應用中儘量減少建立連線的次數,也就是使用長連線,但是會導致OOM(Mysql臨時使用記憶體是管理在連線物件裡面的,連線斷開採釋放),Mysq異常重啟。解決方案:

  • 定期斷開長連線
  • Mysql 5.7及以上版本,執行mysql_reset_connection重新初始化連線資源。

查詢快取

快取中儲存的是之前已經查詢過的結果,key-value形式儲存(key:sql value:查詢結果),如果命中直接返回客戶端。但是查詢快取命中較低,原因是如果對一張表做了更新,那麼這張表的所有查詢快取都會被清空。但是如果是靜態表,則比較適合用查詢快取。(MySQL 8.0已經刪除了該功能)

  • 按需使用查詢快取(設定如下引數):
    query_cache_type = DEMAND
  • SQL(用SQL_CACHE顯示指定):
    mysql> select SQL_CACHE * from T where ID=10;

分析器

分析SQL要做什麼

  • 詞法分析:Mysql需要識別SQL中的字串分別是什麼,代表什麼。(是什麼語句,表名,列名等)
  • 語法分析:根據語法規則判斷SQL語句是否滿足MySQL語法。

優化器

優化查詢。在表裡面有多個索引的時候,決定使用哪個索引或關聯查詢時決定表的連線順序。

執行器

通過分析器知道了要做什麼,通過優化器知道了怎麼做,然後開始執行語句。但是在執行前會先判斷使用者是否對該表有查詢許可權,沒有返回錯誤。(在查詢快取時,如果命中快取,會在返回結果的時候做許可權驗證,查詢也會在優化器之前呼叫precheck驗證許可權),然後呼叫引擎提供的介面。

SELECT語句執行過程

  • 第一步:通過聯結器連線資料庫,連線成功後會獲取相關許可權。
  • 第二步:查詢快取。如果快取中存在則直接返回,否則開始真正執行查詢。
  • 第三步:分析器分析SQL語句要做什麼,並校驗SQL語句是否合法。
  • 第四步:知道要做什麼之後,優化器優化SQL(選擇索引、關聯順序等)
  • 第五步:執行器開始執行SQL,呼叫引擎提供的介面獲取資料並返回。