MySQL-02-體系結構
阿新 • • 發佈:2021-06-21
MySQL體系結構
c/s模型介紹
連線MySQL
# TCP/IP方式(遠端、本地)
mysql -uroot -pAlnk123 -h 10.0.0.51 -P3306
# Socket方式(僅本地)
mysql -uroot -pAlnk123 -S /tmp/mysql.sock
MySQL例項介紹
例項=mysqld後臺守護程序 + Master Thread(主執行緒) + 幹活的Thread + 預分配的記憶體
公司=老闆+經理+員工+辦公室
MySQL程式執行原理
mysqld程式結構
一條SQL語句的執行過程
連線層
(1)提供連線協議:TCP/IP 、SOCKET (2)提供驗證:使用者、密碼,IP,SOCKET (3)提供專用連線執行緒:接收使用者SQL,返回結果 通過以下語句可以檢視到連線執行緒基本情況 mysql> show processlist;
SQL層
(1)接收上層傳送的SQL語句 (2)語法驗證模組:驗證語句語法,是否滿足SQL_MODE (3)語義檢查:判斷SQL語句的型別 DDL :資料定義語言 DCL :資料控制語言 DML :資料操作語言 DQL: 資料查詢語言 ... (4)許可權檢查:使用者對庫表有沒有許可權 (5)解析器:對語句執行前,進行預處理,生成解析樹(執行計劃),說白了就是生成多種執行方案. (6)優化器:根據解析器得出的多種執行計劃,進行判斷,選擇最優的執行計劃 代價模型:資源(CPU IO MEM)的耗損評估效能好壞 (7)執行器:根據最優執行計劃,執行SQL語句,產生執行結果 執行結果:在磁碟的xxxx位置上 (8)提供查詢快取(預設是沒開啟的),會使用redis 或者 tair替代查詢快取功能 (9)提供日誌記錄(日誌管理章節):binlog,預設是沒開啟的。
儲存引擎層
類似於Linux中的檔案系統
負責根據SQL層執行的結果,從磁碟上拿資料
將16進位制的磁碟資料,交由SQL結構化化成表
連線層的專用執行緒返回給使用者
邏輯結構
庫:
庫名,庫屬性
表:
表名
屬性
列:
列名(欄位),
列屬性(資料型別,約束等)
資料行(記錄)
物理儲存結構
庫的物理儲存結構 用檔案系統的目錄來儲存 表的物理儲存結構 MyISAM(一種引擎)的表: -rw-r----- 1 mysql mysql 10816 Apr 18 11:37 user.frm -rw-r----- 1 mysql mysql 396 Apr 18 12:20 user.MYD -rw-r----- 1 mysql mysql 4096 Apr 18 14:48 user.MYI InnoDB(預設的儲存引擎)的表: -rw-r----- 1 mysql mysql 8636 Apr 18 11:37 time_zone.frm -rw-r----- 1 mysql mysql 98304 Apr 18 11:37 time_zone.ibd time_zone.frm:儲存列相關資訊 time_zone.ibd:資料行+索引 表的段、區、頁(16k) 頁:最小的儲存單元,預設16k 區:64個連續的頁,共1M 段:一個表就是一個段,包含一個或多個區