高性能 Mysql 第一章第一節(jié),Mysql的邏輯架構(gòu)

我買的是第二版的,這本書主要是以 Mysql 5 做的一些解讀。
在此之前,我了解關(guān)于 Mysql 優(yōu)化方面知識(shí)的渠道都是來自于一些博客,視頻,這次打算系統(tǒng)性的學(xué)習(xí)了解 Mysql 的各方面知識(shí)。
第一章的名稱為 Mysql 架構(gòu)。

第一章主要談的有這么幾點(diǎn),都是粗略的談了一下。

  • 邏輯架構(gòu)
  • 并發(fā)控制與鎖
  • 事務(wù)與隔離級(jí)別
  • 多版本并發(fā)控制
  • Mysql 中的各種常見引擎

邏輯架構(gòu)

在本書中,談到的邏輯架構(gòu)分為了三層 (由上至下)。

  • 客戶端層
  • 核心層
  • 存儲(chǔ)引擎層

這三層跟我以前學(xué)到的有些不一樣。之前學(xué)到的也是分為三層,第一層一樣都是客戶端層。

第二層是數(shù)據(jù)庫管理引擎層,第三層為數(shù)據(jù)層。

顯然之前學(xué)的是那位老師為了讓視頻更簡(jiǎn)單易懂,將核心層和存儲(chǔ)引擎層放到了一起。

但實(shí)際上,根據(jù)我從書中所了解到的,如果要更專業(yè)的劃分架構(gòu)層,當(dāng)然是核心層要和引擎層分開,因?yàn)樗麄冇植煌墓δ?,在?shí)際架構(gòu)中他們也是分層處理的(在這里我覺得還可以加個(gè)數(shù)據(jù)層,它存在于我們的磁盤或者內(nèi)存中)。

在這里客戶端層主要負(fù)責(zé)連接,授權(quán)認(rèn)證,安全等處理。

第二層核心層,它包含了 Mysql 的大多數(shù)核心內(nèi)容,查詢解析,分析,優(yōu)化,緩存等內(nèi)置函數(shù)都在這一層中完成。

存儲(chǔ)引擎鎖提供的功能也集中在這一層,例如存儲(chǔ)過程,觸發(fā)器,視圖等。

第三層包含了存儲(chǔ)引擎。負(fù)責(zé)提取和存儲(chǔ)數(shù)據(jù)。服務(wù)器通過存儲(chǔ)引擎 API 與引擎進(jìn)行交互。這個(gè) API 隱藏了存儲(chǔ)引擎直接的區(qū)別,使得他們?cè)诓樵儗邮峭该鞯摹?/p>

除了 Innodb 外,該層不會(huì)進(jìn)行 SQL 解析,也不會(huì)互相通訊,只是簡(jiǎn)單的響應(yīng)服務(wù)器請(qǐng)求( Innodb 會(huì)解析外鍵定義,因?yàn)?Mysql 自身沒有實(shí)現(xiàn)它,)。

根據(jù)書中述描,我們能得知,是服務(wù)器是與第三層存儲(chǔ)引擎進(jìn)行通訊,那我就奇怪了,書中并沒有說服務(wù)器層,在邏輯圖中也沒有提到,甚至在邏輯圖中,第一層與第二層是有箭頭指向的,而第二層與第三層沒有箭頭指向。在這里我是疑惑的。

于是我在搜索引擎中查詢了一番,在很多人的博客中,他們給第二層與第三層中加了個(gè)箭頭,也就意味著,書中所述的服務(wù)器就是第二層?在他們的博客中,第二層還有個(gè)玩意,叫查詢執(zhí)行引擎,正是這個(gè)引擎與與存儲(chǔ)引擎發(fā)生交互的。

到底是怎樣,還是得看后面書中有沒有更多的解釋了,現(xiàn)在還不能下斷論,但是為了更好的閱讀與學(xué)習(xí),我在這里還是假設(shè)別人博客里所畫的那幅圖,是正確。

優(yōu)化與執(zhí)行

Mysql 會(huì)在第二層解析查詢語句,并創(chuàng)建一個(gè)內(nèi)部數(shù)據(jù)結(jié)構(gòu)(解析樹),然后對(duì)其進(jìn)行各種優(yōu)化。其中包括重寫查詢,決定查詢的讀表順序,以及選擇索引。

用戶可以通過指令影響他的優(yōu)化策略,也能要求服務(wù)器給出優(yōu)化過程說明。

書中描述到,優(yōu)化器并不關(guān)心某個(gè)表使用哪種存儲(chǔ)引擎(因?yàn)榈谌龑訉?duì)于第二層來說是個(gè)黑盒,用API進(jìn)行通訊)。但是,存儲(chǔ)引擎又對(duì)第二層的優(yōu)化過程存在影響,所以,第二層的優(yōu)化器會(huì)請(qǐng)求第三層,為某種具體操作提供性能與開銷方面的信息和表內(nèi)數(shù)據(jù)統(tǒng)計(jì)信息。

例如,某些引擎可以支持對(duì)某類查詢更有利的索引類型,后面能夠了解更多。

根據(jù)以往的知識(shí),能夠了解到,重復(fù)向 Mysql 發(fā)出兩次查詢指令,第二條查詢速度會(huì)飛快。這是因?yàn)镸ysql緩存了上次的查詢結(jié)果和語句。

根據(jù)本節(jié)內(nèi)容可以得知,正是第二層的緩存功能發(fā)揮了作用。由此也可以得知,如果緩存成功,將會(huì)減少哪些操作呢?

第一,當(dāng)然是不用去第三層操作數(shù)據(jù)了,即減少了磁盤 IO 。第二,也不會(huì)再生成解析書了,沒有解析書,當(dāng)然也就不會(huì)再有優(yōu)化了。而不用優(yōu)化,當(dāng)然也不用第二層與第三層再次進(jìn)行通訊獲取優(yōu)化信息了。

以上為第一章節(jié)的Mysql的邏輯架構(gòu)粗解。

原文鏈接: 高性能 Mysql 第一章第一節(jié),Mysql的邏輯架構(gòu)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容