《高效能MySQL》筆記-整體架構
MySQL邏輯架構
第一層
大多數基於網路的客戶端/伺服器的工具或者服務都有類似的架構。比如連線處理、授權認證、安全等等。
第二層
大多數MySQL的核心服務功能都在這一層,包括查詢解析、分析、優化、快取以及所有的內建函式(例如,日期、時間、數學和加密函式),所有跨儲存引擎的功能都在這一層實現:儲存過程、觸發器、檢視等。
第三層
包含了儲存引擎。儲存引擎負責MySQL中資料的儲存和提取。和GNU/Linux下的各種檔案系統一樣,每個儲存引擎都有它的優勢和劣勢。伺服器通過API與儲存引擎進行通訊。這些介面遮蔽了不同儲存引擎之間的差異,使得這些差異對上層的查詢過程透明。儲存引擎API包含一些底層函式,用於執行諸如“開始一個事務”或者“根據主鍵提取一行記錄”等操作。但儲存引擎不會去解析SQL,不同儲存引擎之間也不會相互通訊,而只是簡單地響應上層伺服器的請求。
連線管理
每個客戶端連線都會在伺服器程式中擁有一個執行緒,這個連線的查詢只會在這個單獨的執行緒中執行,該執行緒只能輪流在某個CPU核心或者CPU中執行。伺服器會負責快取執行緒,因此不需要為每一個新建的連線建立或者銷燬執行緒(執行緒池Thread-Pooling)。
優化與執行
MySQL會解析查詢,並建立內部資料結構(解析樹),然後對其進行各種優化,包括重寫查詢、決定表的讀取順序,以及選擇合適的索引等。使用者可以通過特殊的關鍵字提示(hint)優化器,影響它的決策過程。也可以請求優化器解釋(explain)優化過程的各個因素,使使用者可以知道伺服器是如何進行優化決策的,並提供一個參考基準,便於使用者重構查詢和schema、修改相關配置,使應用盡可能高效執行。
優化器並不關心表使用的是什麼儲存引擎,但儲存引擎對於優化查詢是有影響的。優化器會請求儲存引擎提供容量或某個具體操作的開銷資訊,以及表資料的統計資訊等。例如,某些儲存引擎的某種索引,可能對一些特定的查詢有優化。
對於SELECT語句,在解析查詢之前,伺服器會先檢查查詢快取(Query Cache),如果能夠在其中找到對應的查詢,伺服器就不必再執行查詢解析、優化和執行的整個過程,而是直接返回查詢快取中的結果集。
總結
MySQL擁有分層的架構。上層的伺服器層是服務和查詢執行引擎,下層則是儲存引擎。雖然有很多不同作用的外掛API,但儲存引擎API還是最重要的。如果能理解MySQL在儲存引擎和服務層之間處理查詢時如何通過API來回互動,就能抓住MySQL的核心基礎架構的精髓。
MySQL最初基於ISAM構建(後來被MyISAM取代),其後陸續新增了更多的儲存引擎和事務支援。MySQL有一些怪異的行為是由於歷史遺留導致的。例如,在執行ALTER TABLE時,MySQL提交事務的方式是由於儲存引擎的架構直接導致的,並且資料字典也儲存在.frm檔案中(這並不是說InnoDB會導致ALTER變成非事務型的。對於InnoDB來說,所有的操作都是事務)。
當然,儲存引擎API的架構也有一些缺點。有時候選擇多並非好事,而在MySQL5.0和MySQL5.1中有太多的儲存引擎可以選擇。 InnoDB對於95%以上的使用者來說都是最佳的選擇,所以其他的儲存引擎可能只是讓事情變更復雜難搞,當然也不可否認某些情況下某些儲存引擎能更好的滿足需求。
Oracle一開始收購了InnoDB,之後又收購了MySQL,在同一個屋簷下對於兩者都是有利的。InnoDB和MySQL伺服器之間可以更快的協同發展。MySQL依然基於GPL協議開放全部原始碼,社群和客戶都可以獲得堅固而穩定的資料庫,MySQL正在變得越來越可擴充套件和有用。
相關文章
- 高效能mysql筆記---mysql架構[-1-]MySql筆記架構
- MySQL整體架構與記憶體結構MySql架構記憶體
- 高效能 MySQL【筆記】-架構與歷史MySql筆記架構
- spring下 -spring整體架構,JdbcTemplate筆記Spring架構JDBC筆記
- Hadoop學習筆記(1):概念和整體架構Hadoop筆記架構
- Docker整體架構Docker架構
- nginx 整體架構Nginx架構
- MySQL提升筆記(1):MySQL邏輯架構MySql筆記架構
- Oracle記憶體詳解之一 整體架構Oracle記憶體架構
- Dubbo框架————整體架構框架架構
- 專案-整體架構架構
- MySQL主從原理, 高可用架構與高效能架構MySql架構
- 4.3. Oracle整體架構Oracle架構
- Flutter系列(三) 整體架構Flutter架構
- Tomcat的整體架構Tomcat架構
- Underscore 整體架構淺析架構
- Netty整體架構解析Netty架構
- 《軟體架構設計》讀書筆記架構筆記
- MySQL體系架構MySql架構
- TiDB整體架構介紹TiDB架構
- Linux核心的整體架構Linux架構
- jQuery整體架構原始碼解析jQuery架構原始碼
- 《高效能MySQL》筆記-併發控制MySql筆記
- Mysql學習筆記---MySQL叢集架構之擴容方案MySql筆記架構
- oracle高效能sql調整-筆記1 (轉發)OracleSQL筆記
- .NET 雲原生架構師訓練營(ASP .NET Core 整體概念推演)--學習筆記架構筆記
- 億級流量系統架構之如何設計承載百億流量的高效能架構【石杉的架構筆記】架構筆記
- MySQL 讀書筆記 (一) 體系結構MySql筆記
- 架構學習筆記架構筆記
- ==[圖]Spark系列(四)整體架構分析Spark架構
- jQuery原始碼分析系列 : 整體架構jQuery原始碼架構
- newsql新品TiDB的整體架構SQLTiDB架構
- 瓜子智慧線上客服整體架構架構
- 一張圖進階 RocketMQ - 整體架構MQ架構
- TiDB簡介與整體架構TiDB架構
- [高效能MYSQL學習筆記]事務MySql筆記
- MySQL叢集架構:MHA+MySQL-PROXY+LVS實現MySQL叢集架構高可用/高效能MySql架構
- 《恰如其分的軟體架構》筆記摘要架構筆記