1. 程式人生 > >MySQL優化(1):Mysql架構

MySQL優化(1):Mysql架構

設備 概念 %s 內置 alt bsp 不同語言 發生 不同

一、邏輯架構

  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架構