內(nèi)容
- Mysql 體系結(jié)構(gòu)
- Innodb 體系結(jié)構(gòu)
- Innodb 文件
- Innodb 特性
一 Mysql 體系結(jié)構(gòu)
mysql總體邏輯架構(gòu)圖如下所示:
MySQL邏輯系統(tǒng)架構(gòu)分為3層:
- 應(yīng)用層
- MySQL服務(wù)層
- 存儲引擎層
1.1 應(yīng)用層
應(yīng)用層是MySQL體系架構(gòu)的最上層鞍盗,主要包含如下內(nèi)容: - 連接處理
- 用戶鑒權(quán)
- 安全管理
連接處理:當(dāng)一個客戶端向服務(wù)端發(fā)送連接請求后孟岛,MySQL server會從線程池中分配一個線程來和客戶端進行連接重绷,以后該客戶端的請求都會被分配到該線程上夺荒。MySQL Server為了提高性能肩民,提供了線程池,減少了創(chuàng)建線程和釋放線程所花費的時間掰伸。
用戶鑒權(quán): 當(dāng)客戶端向MySQL服務(wù)端發(fā)起連接請求后划栓,MySQL server會對發(fā)起連接的用戶進行鑒權(quán)處理,MySQL鑒權(quán)依據(jù)是: 用戶名损姜,客戶端主機地址和用戶密碼
安全管理: 當(dāng)客戶連接到MySQL server后饰剥,MySQL server會根據(jù)用戶的權(quán)限來判斷用戶具體可執(zhí)行哪些操作。MySQL 提供的部分權(quán)限的如下:
2.2 MySQL 服務(wù)層
該層是MySQL Server的核心層摧阅,提供了MySQL Server數(shù)據(jù)庫系統(tǒng)的所有邏輯功能汰蓉,該層可以分為如下不同的組件:
- MySQL Management Server & utilities(系統(tǒng)管理)
- SQL Interface(SQL 接口)
- SQL Parser(SQL 解析器)
- Optimizer (查詢優(yōu)化器)
- Caches & buffers(緩存)
- MySQL Management Server & utilities(系統(tǒng)管理) 提供了豐富的數(shù)據(jù)庫管理功能,具體如下:
- 數(shù)據(jù)庫備份和恢復(fù)
- 數(shù)據(jù)庫安全管理棒卷,如用戶及權(quán)限管理
- 數(shù)據(jù)庫復(fù)制管理
- 數(shù)據(jù)庫集群管理
- 數(shù)據(jù)庫分區(qū)顾孽,分庫,分表管理
- 數(shù)據(jù)庫元數(shù)據(jù)管理
- SQL Interface(SQL 接口) SQL接口比规,接收用戶的SQL命令并進行處理若厚,得到用戶所需要的結(jié)果,具體處理功能如下:
- Data Manipulation Language (DML).
- Data Definition Language (DDL).
- 存儲過程
- 視圖
- 觸發(fā)器
- SQL Parser(SQL 解析器): 解析器的作用主要是解析查詢語句蜒什,最終生成語法樹测秸。首先解析器會對查詢語句進行語法分析,如果語句語法有錯誤,則返回相應(yīng)的錯誤信息乞封。語法檢查通過后,解析器會查詢緩存岗憋,如果緩存中有對應(yīng)的語句肃晚,就直接返回結(jié)果不進行接下來的優(yōu)化執(zhí)行操作。
- Optimizer(查詢優(yōu)化器): 優(yōu)化器的作用主要是對查詢語句進行優(yōu)化仔戈,包括選擇合適的索引关串,數(shù)據(jù)的讀取方式。
- Caches & buffers(緩存) :包括全局和引擎特定的緩存监徘,提高查詢的效率晋修。如果查詢緩存中有命中的查詢結(jié)果,則查詢語句就可以從緩存中取數(shù)據(jù)凰盔,無須再通過解析和執(zhí)行墓卦。這個緩存機制是由一系列小緩存組成,如表緩存户敬、記錄緩存落剪、key緩存、權(quán)限緩存等尿庐。
2.3 存儲引擎層
存儲引擎: 存儲引擎是MySQL中具體與文件打交道的子系統(tǒng)忠怖,也是MySQL最有特色的地方。MySQL區(qū)別于其他數(shù)據(jù)庫的最重要特點是其插件式的表存儲引擎抄瑟。存儲引擎是表級別的凡泣,同一個db下面不用表可以指定不同的存儲引擎;
二 Innodb 體系結(jié)構(gòu)
https://juejin.im/post/6844903869697228807
https://developer.aliyun.com/article/743573
三 Innodb文件
- 表空間
- 重做日志
3.1 表空間
可以通過以下查看mysql 數(shù)據(jù)目錄
show global variables like "%datadir%";
在數(shù)據(jù)目錄下皮假,我們可以看到一個ibdata1的問題鞋拟,這個就是mysql默認(rèn)的表空間文件,表空間文件是innodb引擎邏輯結(jié)構(gòu)的最高層惹资,所有的數(shù)據(jù)都被邏輯的存放在這個空間严卖,表空間由段、區(qū)布轿、頁組成哮笆;
如果innodb_file_per_table參數(shù)設(shè)置為on,則會為每個表建立一個單獨的表空間汰扭,命名為tablename.ibd,稠肘,例如下面創(chuàng)建了兩個表t1和t2,t1.ibd會存儲表t1的數(shù)據(jù)萝毛、索引和插入緩沖bitmap项阴,其他的數(shù)據(jù),例如:插入緩沖索引頁、undo信息等還是會存儲在公共的表空間ibdata1中环揽;
3.2 重做日志
redo日志是innodb引擎保證事務(wù)持久性的關(guān)鍵略荡,每個引擎有一個重做日志組,一個重做日志組有兩個重做日志文件歉胶,先寫一個汛兜,一個寫滿換寫第二個,第二個寫滿在重寫寫第一個通今;如下所示的ib_logfile0和ib_logfile1文件就是默認(rèn)的重做日志組
四 Innodb 特性
- buffer pool
https://juejin.im/post/6844903874172551181#heading-9 - change buffer
https://juejin.im/post/6844903875271475213
http://mysql.taobao.org/monthly/2015/07/01/ - double write
- 自適應(yīng)哈希索引
引用:
- MySQL體系架構(gòu)簡介:https://zhuanlan.zhihu.com/p/43736857