MySQL架構(gòu)和歷史 讀書筆記

1.1 MySQL架構(gòu)與歷史

存儲引擎不會去解析SQL寿桨,不同存儲引擎也不會互相通信,InnoDB是個例外,它會解析外鍵定義

1.1.1 連接管理和安全性

? ? ?5.5 開始支持線程池插件

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

對于SELECT語句,在解析查詢之前眠菇,服務器會先檢查查詢緩存,如果能夠在其中找到對應的查詢袱衷,服務器就不必再執(zhí)行查詢解析捎废、優(yōu)化和執(zhí)行的整個過程,而是直接返回查詢緩存中的結(jié)果集致燥。

1.2 并發(fā)控制

層面:服務器層與存儲引擎層

1.2.1 讀寫鎖

共享鎖 => 讀鎖? ? 排他鎖 => 寫鎖

1.2.2 鎖粒度

表鎖? 行級鎖(存儲引擎)

1.3 事務

一組原子性的SQL查詢登疗,或者說一個獨立的工作單元

ACID:

原子性(Atomicity)? 一個事務必須被視為一個不可分隔 的最小工作單元,整個事務中的所有操作要么全部提交成功嫌蚤,要么全部失敗回滾

一致性(Consistency)? ? 數(shù)據(jù)庫總是從一個一致性的狀態(tài)轉(zhuǎn)換到另一個一致性的狀態(tài)

隔離性(Isolation)? 一個事務所做的修改在最終提交以前辐益,對其他事務是可不見的

持久性(durability)? 一旦事務提交,則其所作的修改就會永久保存到數(shù)據(jù)庫中

1.3.1 隔離級別? ? ?

?未提交讀? 提交讀? 可重復讀? 可串行化

較低級別的隔離通惩阎ǎ可以執(zhí)行更高的并發(fā)智政,系統(tǒng)的開銷也更低

隔離級別? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 臟讀可能性? ? ? ? 不可重復讀可能性? ? ? 幻讀可能性? ? ? 加鎖讀

READ UNCOMMITTED? ? ? ? ? ? ? Yes? ? ? ? ? ? ? ? ? ? ? Yes? ? ? ? ? ? ? ? ? ? ? ? ? ?Yes? ? ? ? ? ? ? ? No

READ COMMITTED? ? ? ? ? ? ? ? ? ?No? ? ? ? ? ? ? ? ? ? ? ? Yes? ? ? ? ? ? ? ? ? ? ? ? ? ?Yes? ? ? ? ? ? ? ?No

REPEATABLE READ? ? ? ? ? ? ? ? ? No? ? ? ? ? ? ? ? ? ? ? ? No? ? ? ? ? ? ? ? ? ? ? ? ? ? Yes? ? ? ? ? ? ? ?No

SERIALIZABLE? ? ? ? ? ? ? ? ? ? ? ? ? ?No? ? ? ? ? ? ? ? ? ? ? ? No? ? ? ? ? ? ? ? ? ? ? ? ? ? ?No? ? ? ? ? ? ? ?Yes

臟讀:事務可以讀取未提交的數(shù)據(jù)

幻讀:當某個事務在讀取某個范圍內(nèi)的記錄時,另外一個事務又在該范圍內(nèi)插入了新的記錄箱蝠,當之前的事務再次讀取該范圍的記錄時续捂,會產(chǎn)生幻行

1.3.2 死鎖

死鎖是指兩個或多個事務在同一資源上互相占用,并請求鎖定對方占用的資源宦搬,從而導致惡行循環(huán)的現(xiàn)象

InnoDB目前處理死鎖的方式是牙瓢,將持有最少行級排他鎖的事務進行回滾。

死鎖的產(chǎn)生有雙重原因:有些事因為真正的數(shù)據(jù)沖突间校,這種情況通常很難避免矾克,但有些則完全是由于存儲引擎的實現(xiàn)方式導致的。

1.3.3 事務日志

事務日志可以幫助提高事務的效率憔足。使用事務日志胁附,存儲引擎在修改表的數(shù)據(jù)時只需要修改其內(nèi)存拷貝差购,再把改修改行為記錄到持久在硬盤上的事務日志中,而不用每次都將修改的數(shù)據(jù)本書持久到磁盤汉嗽。事務日志采用的時追加的方式,因此寫日志的操作時磁盤上一小塊區(qū)域內(nèi)的順序I/O找蜜,而不想隨機I/O需要在磁盤的多個地方移動磁頭饼暑,所以采用事務日志的方式相對來說要快得多。事務日志持久以后洗做,內(nèi)存中被修改的數(shù)據(jù)在后臺可以慢慢地刷回磁盤弓叛。

1.3.4 MySQL 中的事務

自動提交(AUTOCOMMIT):

當AUTOCOMMIT=0時,所有的查詢都是在一個事務中诚纸,直到顯示地執(zhí)行COMMIT提交或者ROLLBACK回滾撰筷,該事務結(jié)束,同時又開始了另一個新事務畦徘。

在事務中混合使用存儲引擎

MySQL服務器層不管理事務毕籽,事務是由下層地存儲引擎實現(xiàn)地。==>在同一個事務中井辆,使用多重引擎是不可靠的关筒。

隱式和顯式鎖定

在事務執(zhí)行過程中,隨時都可以鎖定杯缺,鎖只有在執(zhí)行COMMIT或者ROLLBACK的時候才會釋放蒸播,并且所有的鎖是在同一時刻釋放。前面描述的鎖定都是隱式鎖定萍肆,InnoDB回根據(jù)隔離級別在需要的時候自動加鎖袍榆。

InnoDB也支持通過特定的語句進行顯式鎖定,這些語句不屬于SQL規(guī)范

SELECT ... LOCK IN SHARE MODE

SELECT ... FOR UPDATE

1.4 多版本并發(fā)控制? MVVC

SELECT

InnoDB 只查找版本早于當前事務版本的數(shù)據(jù)行(也就是塘揣,行的系統(tǒng)版本號小于或者等于事務的系統(tǒng)版本號)確保事務讀取的行包雀,要么是在事務開始前已經(jīng)存在的,要么是事務自身插入或者修改過的勿负。

行的刪除版本要么未定義馏艾,要么大于當前事務版本號。這可以確保事務讀取到的行奴愉,在事務開始之前未被刪除琅摩。

INSERT

InnoDB 為新插入的每一行保存當前系統(tǒng)版本號作為行版本號

DELETE

InnoDB為刪除的每一行保存當前版本號作為行刪除標識

UPDATE

InnoDB 為插入一行新紀錄,保存當前系統(tǒng)版本號作為行版本號锭硼,同時保存當前系統(tǒng)版本號到原來的行作為行刪除標識房资。

MVVC只在REPEATABLE READ 和 READ COMMITTED 兩個隔離級別下工作。

READ UNCOMMITTED總是讀取足心的數(shù)據(jù)行檀头,而不是符合當前事務版本的數(shù)

據(jù)行轰异,而SERIALIZABLE? 則會對所有讀取的行都枷鎖岖沛。

1.5 MySQL存儲引擎

1.5.1 InnoDB 存儲引擎

被設(shè)計用來處理大量的短期事務

InnoDB的數(shù)據(jù)存儲在表空間中,表空間是InnoDB管理的一個黑盒子搭独,由一系列的數(shù)據(jù)文件組成

InnoDB采用MVCC來支持高并發(fā)婴削,并且實現(xiàn)了四個標準的隔離級別。其默認級別是REPEATABLE READ 牙肝,并且通過間隙鎖策略防止幻讀的出現(xiàn)唉俗。

支持熱備份? 其他引擎不支持

1.5.2 MyISAM 存儲引擎(數(shù)據(jù)文件.MYD? 索引文件.MYI)

支持全文索引、壓縮配椭、空間函數(shù)等嵌施,但不支持事務和行級鎖颂翼,崩潰后無法恢復

特性:

加鎖與并發(fā):? 對整張表加鎖。

修復

支持全文索引

延遲更新索引鍵? 寫入內(nèi)存的鍵緩存區(qū)

如果表在創(chuàng)建并導入數(shù)據(jù)以后,不會再進行修改操作族奢,那么這樣的表或許適合采用MyISAM壓縮表

1.5.3 內(nèi)建的其他存儲引擎

Archive:只支持select 和 insert碧信,每次SELECT查詢都需要全表掃描耕蝉,支持行級鎖和專用的緩沖區(qū)铐刘,可以實現(xiàn)高并發(fā)的插入,適合日志和數(shù)據(jù)采集類應用镰惦,或者一些需要更快速insert操作的場合寄雀。

Blackhole:沒有實現(xiàn)任何的存儲機制,會丟棄所有插入的數(shù)據(jù)陨献,不做任何保存盒犹。可以用于復制數(shù)據(jù)到備庫眨业,或者只是簡單地記錄到日志急膀。

CSV:可以將普通地csv文件(逗號分割值的文件)作為MySQL的表來處理,但不支持索引龄捡∽可可以作為一種數(shù)據(jù)交換的機制

Federated:訪問其他MySQL服務器的一個代理,最初設(shè)計初衷是為了和SQL Server聘殖、Oracle競爭晨雳。默認禁用

Memory:需要快速地訪問數(shù)據(jù),并且這些數(shù)據(jù)不會被修改奸腺,重啟后丟失也沒關(guān)系餐禁,那么使用Memory表是非常有用的。

場景:

用于查找或者映射表突照,例如將郵編和州名映射的表

用于緩存周期性聚合數(shù)據(jù)的結(jié)果

用于保存數(shù)據(jù)分析中產(chǎn)生的中間數(shù)據(jù)

缺點:

表級鎖帮非,并發(fā)寫入性能低

不支持BLOB 和TEXT類型的列,并且每行的長度是固定的。(即使指定了VARCHAR末盔,實際存儲時也會轉(zhuǎn)換為CHAR筑舅,導致內(nèi)存浪費)

Merge:MyISAM引擎的一個變種。? 是由多個MyISAM表合并而來的虛擬表陨舱。 用于日志或者數(shù)據(jù)倉庫類應用

NDB集群:

1.5.5 引擎選型

事務? InnoDB? XtraDB

不需要事務? 主要是SELECT和INSERT操作? ? MYISAM

備份? InnoDB(在線熱備份)

崩潰恢復? InnoDB

特有的特性

日志型應用:MyISAM? Archive(開銷低翠拣,插入速度快)

CD-ROM應用? MyISAM

思維導圖鏈接地址:https://www.processon.com/mindmap/5fa936eb7d9c081baf20a636
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市游盲,隨后出現(xiàn)的幾起案子心剥,更是在濱河造成了極大的恐慌,老刑警劉巖背桐,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蝉揍,居然都是意外死亡链峭,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門又沾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來弊仪,“玉大人,你說我怎么就攤上這事杖刷±” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵滑燃,是天一觀的道長役听。 經(jīng)常有香客問我,道長表窘,這世上最難降的妖魔是什么典予? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮乐严,結(jié)果婚禮上瘤袖,老公的妹妹穿的比我還像新娘。我一直安慰自己昂验,他們只是感情好捂敌,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著既琴,像睡著了一般占婉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上甫恩,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天锐涯,我揣著相機與錄音,去河邊找鬼填物。 笑死纹腌,一個胖子當著我的面吹牛霎终,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播升薯,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼莱褒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了涎劈?” 一聲冷哼從身側(cè)響起广凸,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蛛枚,沒想到半個月后谅海,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡蹦浦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年扭吁,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盲镶。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡侥袜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出溉贿,到底是詐尸還是另有隱情枫吧,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布宇色,位于F島的核電站九杂,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏宣蠕。R本人自食惡果不足惜尼酿,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望植影。 院中可真熱鬧裳擎,春花似錦、人聲如沸思币。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谷饿。三九已至惶我,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間博投,已是汗流浹背绸贡。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人听怕。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓捧挺,卻偏偏與公主長得像,于是被迫代替她去往敵國和親尿瞭。 傳聞我的和親對象是個殘疾皇子闽烙,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容