MySQL 體系架構 (一)

1.MySQL體系結構

由圖苟呐,可以看出MySQL最上層是連接組件痒芝。下面服務器是由連接池管理工具和服務牵素、SQL接口严衬、解析器優(yōu)化器笆呆、緩存请琳、存儲引擎文件系統(tǒng)組成腰奋。

連接池:由于每次建立建立需要消耗很多時間单起,連接池的作用就是將這些連接緩存下來,下次可以直接用已經(jīng)建立好的連接劣坊,提升服務器性能。

管理工具和服務:系統(tǒng)管理和控制工具屈留,例如備份恢復局冰、Mysql復制、集群等

SQL接口:接受用戶的SQL命令灌危,并且返回用戶需要查詢的結果康二。比如select from就是調用SQL Interface

解析器:?SQL命令傳遞到解析器的時候會被解析器驗證和解析。解析器是由Lex和YACC實現(xiàn)的勇蝙,是一個很長的腳本沫勿, 主要功能:

a . 將SQL語句分解成數(shù)據(jù)結構,并將這個結構傳遞到后續(xù)步驟味混,以后SQL語句的傳遞和處理就是基于這個結構的

b. 如果在分解構成中遇到錯誤产雹,那么就說明這個sql語句是不合理的

優(yōu)化器:查詢優(yōu)化器,SQL語句在查詢之前會使用查詢優(yōu)化器對查詢進行優(yōu)化翁锡。他使用的是“選取-投影-聯(lián)接”策略進行查詢蔓挖。

用一個例子就可以理解: select uid,name from user where gender = 1;

這個select 查詢先根據(jù)where 語句進行選取,而不是先將表全部查詢出來以后再進行gender過濾

這個select查詢先根據(jù)uid和name進行屬性投影馆衔,而不是將屬性全部取出以后再進行過濾

將這兩個查詢條件聯(lián)接起來生成最終查詢結果

緩存器:?查詢緩存瘟判,如果查詢緩存有命中的查詢結果,查詢語句就可以直接去查詢緩存中取數(shù)據(jù)角溃。

通過LRU算法將數(shù)據(jù)的冷端溢出拷获,未來得及時刷新到磁盤的數(shù)據(jù)頁,叫臟頁减细。

這個緩存機制是由一系列小緩存組成的匆瓜。比如表緩存,記錄緩存,key緩存陕壹,權限緩存等

2.MySQL內存結構

MySQL中內存大致分為:全局內存(Global buffer)质欲、線程內存(Thread buffer)?兩大部分。

全局內存:緩沖池里面有數(shù)據(jù)緩存糠馆、索引緩存嘶伟、鎖信息、插入緩存等等又碌。此外還有重做日志緩存九昧、額外的內存池。

線程內存:Master Thread毕匀、IO Thread铸鹰、Purage Thread、Page Cleaner Thread皂岔。

CheckPoint技術:緩沖池的設計目的為了協(xié)調CPU速度與磁盤速度的鴻溝蹋笼。因此跟新或者刪除的時候直接操作的是內存的數(shù)據(jù),先寫入重做日志躁垛,然后再修改內存池里面的數(shù)據(jù)剖毯,最后定時刷新到磁盤上。

3教馆、MySQL文件結構

(1) 參數(shù)文件:啟動MySQL實例的時候逊谋,指定一些初始化參數(shù),比如:緩沖池大小土铺、數(shù)據(jù)庫文件路徑胶滋、用戶名密碼等。

(2) 日志文件:比如:錯誤日志悲敷、二進制日志究恤、慢查詢日志、查詢日志等等镀迂。

通過show variables like "error_log"來查看錯誤日志存放內容丁溅。

通過show variables like "long_query_time"來查看慢查詢日志記錄的閾值。默認的慢查詢日志的閥值是10秒探遵,也就是查詢時長超過10秒就會記錄到慢查詢日志文件窟赏;

(3) socket文件:當用UNIX域套接字方式進行連接的時候需要的文件。

(4) pid文件:MySQL實例的進程ID文件箱季。

(5) 表結構文件:用來存放MySQL表結構定義文件涯穷。

.frm后綴命名的文件都是表結構文件,和存儲引擎類型無關藏雏。所有的表都會生成一個.frm文件拷况;

(6) 存儲引擎文件:存儲引擎正在存儲了記錄和索引等數(shù)據(jù)。

(1)共享表空間:共享表空間文件以.ibdata*來命名; 共享表空間下赚瘦,innodb所有數(shù)據(jù)保存在一個單獨的表空間里面粟誓,而這個表空間可以由很多個文件組成,一個表可以跨多個文件存在起意,所以其大小限制不再是文件大小的限制鹰服,而是其自身的限制。從Innodb的官方文檔中可以看到揽咕,其表空間的最大限制為64TB悲酷,也就是說,Innodb的單表限制基本上也在64TB左右了亲善,當然這個大小是包括這個表的所有索引等其他相關數(shù)據(jù)设易。

共享表空間主要存放double write、undo log(undo log沒有獨立的表空間蛹头,需要存放在共享表空間)

(2)獨立表空間:每個表擁有自己獨立的表空間用來存儲數(shù)據(jù)和索引顿肺。

(3)查看數(shù)據(jù)庫是否啟用獨立表空間:

show variables like ‘innodb_file_per_table’;查看,innodb_file_per_table=ON,表示啟用了獨立表空間渣蜗;

(4)使用獨立表空間的優(yōu)點:

如果使用軟鏈接將大表分配到不同的分區(qū)上挟冠,易于管理數(shù)據(jù)文件

易于監(jiān)控解決IO資源使用的問題;

易于修復和恢復損壞的數(shù)據(jù)袍睡;

相互獨立的,不會影響其他innodb表肋僧;

導出導入只針對單個表斑胜,而不是整個共享表空間;

解決單個文件大小的限制嫌吠;

對于大量的delete操作止潘,更易于回收磁盤空間;

碎片較少辫诅,易于整理optimize table凭戴;

易于安全審計;

易于備份

如果在innodb表已創(chuàng)建后設置innodb_file_per_table炕矮,那么數(shù)據(jù)將不會遷移到單獨的表空間上么夫,而是續(xù)集使用之前的共享表空間。只有新創(chuàng)建的表才會分離到自己的表空間文件肤视。

(5)共享表空間的數(shù)據(jù)文件配置:

innodb_data_file_path參數(shù):設置innoDB共享表空間數(shù)據(jù)文件的名字和大小档痪,例如innodb_data_file_path=ibdata1:12M:autoextend(初始大小12M,不足自增)

innodb_data_home_dir參數(shù):innodb引擎的共享表空間數(shù)據(jù)文件的存放目錄

目前主要是使用獨立表空間邢滑,但是共享表空間也是需要的腐螟,共享表空間主要存放double write、undo log等

4、InnoDB表存儲結構

(1)每頁=16Kb(頁類型:數(shù)據(jù)頁乐纸、undo頁衬廷、系統(tǒng)頁、事務數(shù)據(jù)頁汽绢、插入緩沖位圖頁吗跋、插入緩沖空閑列表頁、未壓縮的二進制大對象頁庶喜、壓縮的二進制大對象頁)

(2)區(qū)=64個連續(xù)的頁=64*16Kb=1MB

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末小腊,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子久窟,更是在濱河造成了極大的恐慌秩冈,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件斥扛,死亡現(xiàn)場離奇詭異入问,居然都是意外死亡,警方通過查閱死者的電腦和手機稀颁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門芬失,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人匾灶,你說我怎么就攤上這事棱烂。” “怎么了阶女?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵颊糜,是天一觀的道長。 經(jīng)常有香客問我秃踩,道長衬鱼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任憔杨,我火速辦了婚禮鸟赫,結果婚禮上,老公的妹妹穿的比我還像新娘消别。我一直安慰自己抛蚤,他們只是感情好,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布妖啥。 她就那樣靜靜地躺著霉颠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪荆虱。 梳的紋絲不亂的頭發(fā)上蒿偎,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天朽们,我揣著相機與錄音,去河邊找鬼诉位。 笑死骑脱,一個胖子當著我的面吹牛,可吹牛的內容都是我干的苍糠。 我是一名探鬼主播叁丧,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼岳瞭!你這毒婦竟也來了拥娄?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤瞳筏,失蹤者是張志新(化名)和其女友劉穎稚瘾,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體姚炕,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡摊欠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了柱宦。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片些椒。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖掸刊,靈堂內的尸體忽然破棺而出免糕,到底是詐尸還是另有隱情,我是刑警寧澤忧侧,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布说墨,位于F島的核電站,受9級特大地震影響苍柏,放射性物質發(fā)生泄漏。R本人自食惡果不足惜姜贡,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一试吁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧楼咳,春花似錦熄捍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至苹熏,卻和暖如春碟贾,著一層夾襖步出監(jiān)牢的瞬間币喧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工袱耽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留杀餐,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓朱巨,卻偏偏與公主長得像史翘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子冀续,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內容

  • 一. MySQL體系結構 1琼讽、Connectors指的是不同語言中與SQL的交互 2、Management Ser...
    PennLi閱讀 768評論 0 2
  • 學習 MySQL 的整體架構之前洪唐,我們先了解一下如何設計一個關系型數(shù)據(jù)钻蹬;我們設計數(shù)據(jù)庫的時候,主要需要考慮兩個核心...
    lframe閱讀 792評論 0 0
  • 基礎概念 數(shù)據(jù)庫實例是由數(shù)據(jù)庫后臺進程/線程以及一個共享內存區(qū)組成桐罕。共享內存可以被運行的后臺進程/線程所共享脉让。需要...
    LANSHENGYANG閱讀 107評論 0 0
  • 基礎概念 數(shù)據(jù)庫實例是由數(shù)據(jù)庫后臺進程/線程以及一個共享內存區(qū)組成。共享內存可以被運行的后臺進程/線程所共享功炮。需要...
    GrooveWind閱讀 2,149評論 0 1
  • 2. mysql 體系架構 連接方式TCP/IPSocket mysqld程序結構mysqld程序結構mysql程...
    田村君閱讀 175評論 0 0