天天看點

關系型資料庫 MySQL 體系結構詳解MySQL 體系結構資料庫與資料庫執行個體參考資料

通過前面幾篇文章學會如何安裝 MySQL 以及基礎知識後,我們還需要學習體系結構,MySQL 和 Oracle 體系結構類似,如果學過 Oracle 可以類比記憶,基礎牢固才能學好資料庫,才能做一個合格的 DBA,下面一起來看看。

關系型資料庫 MySQL 體系結構詳解MySQL 體系結構資料庫與資料庫執行個體參考資料

MySQL 體系結構可分為兩層,MySQL Server 層和 存儲引擎層,而 MySQL Server 層又分為連接配接層和 SQL 層,連接配接層包括通信協定、線程處理、使用者名密碼認證,SQL 層包含權限判斷、查詢緩存、解析器、預處理器、查詢優化器、緩存和執行計劃。存儲引擎主要有InnoDB、MyISAM、Memory、blackhole、TokuDB 和 MariaDB columnstore 等。詳細的功能資訊請看下文。

MySQL 體系結構

1、Connectors

指的是不同語言的應用程式接口(如JDBC、ODBC、Python等)與 MySQL 的連接配接互動層;

2、Management Serveices &Utilities

系統管理和控制工具,例如備份恢複、MySQL 複制、叢集等;

3、Connection Pool

連接配接池,管理緩沖使用者連接配接、使用者名、密碼、權限校驗、線程處理等需要緩存的資訊; MySQL 伺服器對每一個連接配接産生一個線程,而這個線程獨自為該連接配接服務。是以,MySQL 伺服器中的并行是指并行執行許多個查詢而非一次查詢内的并行。也由此原因緻使 MySQL 對多核支援不夠好,MySQL 伺服器是一組線程的集合。

4、SQL Interface

SQL 接口,接受使用者的 SQL 指令,并且傳回使用者需要查詢的結果。比如 DML 就是調用 SQL Interface;

5、Parser

解析器,SQL 指令傳遞到解析器的時候會被解析器驗證和解析。解析器是由 Lex 和 YACC 實作的,是一個很長的腳本;

主要功能:

l 将 SQL 語句分解成資料結構,并将這個結構傳遞到後續步驟,以後 SQL 語句的傳遞和處理就是基于這個結構的;

l 如果在分解構成中遇到錯誤,那麼就說明這個 SQL 語句是不合理的 ;

l Lex:Lexical Analyzer 是一種生成掃描器的工具。掃描器是一種識别文本中的詞彙模式的程式;

l Yacc:Yet Another Compiler Compiler 是一種工具,将任何一種程式設計語言的所有文法翻譯成針對此種語言的 Yacc 文法解析器;

6、Optimizer

查詢優化器,SQL 語句在查詢之前會使用查詢優化器對查詢進行優化。他使用的是“選取-投影-聯接”政策進行查詢;

優化 select uid,name from user where gender = 1;

SQL語句執行的過程如下:

l 這個 select 查詢先根據 where 語句進行記錄選取,而不是先将表全部記錄查詢出來以後再進行 gender 過濾;

l 這個 select 查詢先根據 uid 和 name 進行屬性投影(字段選擇),而不是将屬性全部取出以後再進行過濾;

l 将這兩個查詢條件聯接起來生成最終查詢結果;

7、Cache&Buffer

高速緩存區,查詢緩存,如果查詢緩存有命中的查詢結果,查詢語句就可以直接去查詢緩存中取資料。通過 LRU 算法将資料的冷端溢出,未來得及重新整理到磁盤的資料頁,叫髒頁。這個緩存機制是由一系列小緩存組成的。比如表緩存,記錄緩存,key 緩存,權限緩存等;

8、Engine

存儲引擎,存儲引擎是 MySQL 與檔案打交道的子系統。也是 MySQL 最具有特色的一個地方。MySQL 的存儲引擎是插件式的,它根據 MySQLAB 公司提供的檔案通路層的一個抽象接口來定制一種檔案通路機制(這種通路機制就叫存儲引擎)現在有很多種存儲引擎,各個存儲引擎的優勢各不一樣。MySQL 也支援自定義制存儲引擎,甚至一個庫中不同的表使用不同的存儲引擎,這些都是允許的。

資料庫與資料庫執行個體

資料庫:實體作業系統檔案或其他形式檔案類型的集合;

資料庫執行個體:資料庫背景程序或線程及一個共享記憶體區域組成,資料庫執行個體是用來操作資料庫檔案的;

MySQL 是一個單程序多線程架構的資料庫,與 SQL Server 類似。Oracle 資料庫在 Linux OS 下是多程序,在 Windows 下也是單程序多線程。MySQL 資料庫執行個體在系統上的表現就是一個程序。

MySQL常用存儲引擎

存儲引擎其實就是如何存儲資料,如何為存儲的資料建立索引以及如何更新、查詢資料等技術實作的方法。

MySQL 中的資料用各種不同的技術存儲在檔案(或記憶體)中,這些技術中的每一種技術都使用不同的存儲機制、索引技巧、鎖定水準,并且最終提供廣泛的不同功能和能力。在 MySQL 中将這些不同的技術及配套的相關功能稱為存儲引擎。

1、存儲引擎查詢

檢視 MySQL 伺服器支援的存儲引擎及預設的存儲引擎。存儲引擎是針對資料表的,不是針對資料庫的,通過如下指令檢視具體表指定的存儲引擎。

root@db22:10:  [(none)] show engines;   #檢視資料庫存儲引擎
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
|Engine             | Support |Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
|InnoDB             | DEFAULT | Supportstransactions, row-level locking, and foreign keys     | YES          | YES | YES        |
|MRG_MYISAM         | YES     | Collection of identical MyISAMtables                          | NO           | NO   | NO        |
|MEMORY             | YES     | Hash based, stored in memory, useful fortemporary tables      | NO           | NO   | NO        |
|BLACKHOLE          | YES     | /dev/null storage engine (anything youwrite to it disappears) | NO           |NO   | NO         |
|MyISAM             | YES     | MyISAM storage engine                                          |NO           | NO   | NO        |
|CSV                | YES     | CSV storage engine                                             |NO           | NO   | NO        |
|ARCHIVE            | YES     | Archive storage engine                                         |NO           | NO   | NO        |
|PERFORMANCE_SCHEMA | YES     |Performance Schema                                             |NO           | NO   | NO        |
|FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rowsin set (0.00 sec)
 
root@db22:10:  [(none)] show variables like'%engine%';  #檢視資料庫預設存儲引擎
+----------------------------------+--------+
|Variable_name                    |Value  |
+----------------------------------+--------+
|default_storage_engine           | InnoDB|
|default_tmp_storage_engine       | InnoDB|
|disabled_storage_engines         |        |
|internal_tmp_disk_storage_engine | InnoDB |
+----------------------------------+--------+
4 rowsin set, 1 warning (0.18 sec)           

複制

關系型資料庫 MySQL 體系結構詳解MySQL 體系結構資料庫與資料庫執行個體參考資料

2、常用存儲引擎

關系型資料庫 MySQL 體系結構詳解MySQL 體系結構資料庫與資料庫執行個體參考資料

下表是各大存儲引擎特點與應用場景的比較。

關系型資料庫 MySQL 體系結構詳解MySQL 體系結構資料庫與資料庫執行個體參考資料

InnoDB 和 MyISAM 是最主流的兩個存儲引擎,現在資料庫預設的存儲引擎就是 InnoDB,且 MySQL 8.0 宣布 InnoDB 存儲資料字典,MyISAM 徹底被廢棄,脫離了 MySQL。

關系型資料庫 MySQL 體系結構詳解MySQL 體系結構資料庫與資料庫執行個體參考資料

可以看出 InnoDB 優勢還是很明顯的。InnoDB 是 MySQL 資料庫 5.5 版本後的預設存儲引擎,預設所說的 MySQL 即指 InnoDB 存儲引擎的 MySQL,那麼關于 InnoDB 的體系結構下一次在一起來看看吧,今日就到這裡啦。

參考資料

https://my.oschina.net/peakfang/blog/2240253

張甦 著 《MySQL王者晉級之路》