【高性能MySQL】MySQL架構(gòu)與歷史

三層邏輯架構(gòu)

  • 第一層是連接/線程處理嚼贡。比如連接處理同诫、授權(quán)認(rèn)證、安全等等误窖。
  • 第二層是核心服務(wù)層。包括查詢解析柔吼、分析吭服、優(yōu)化蝗罗、緩存以及所有內(nèi)置函數(shù),所有跨存儲(chǔ)引擎的功能都在這一層實(shí)現(xiàn):存儲(chǔ)過程串塑、觸發(fā)器、視圖等等打瘪。
  • 第三層包含了存儲(chǔ)引擎傻昙。存儲(chǔ)引擎負(fù)責(zé) MySQL 中的數(shù)據(jù)的存儲(chǔ)與提取。每個(gè)存儲(chǔ)引擎都有它的優(yōu)勢和劣勢妆档。服務(wù)器通過API與存儲(chǔ)引擎進(jìn)行通信。

并發(fā)控制

只要有多個(gè)查詢需要在同一時(shí)刻修改數(shù)據(jù)胸梆,就會(huì)產(chǎn)生并發(fā)控制的問題。MySQL 在兩個(gè)層面控制并發(fā)讀寫:服務(wù)器層與存儲(chǔ)引擎層碰镜。

讀鎖:共享、互不阻塞秽荤。
寫鎖:排他性菠发。會(huì)阻塞其他寫鎖與讀鎖。
表級鎖:鎖粒度較大滓鸠,但是鎖的開銷最小。
行級鎖:只在存儲(chǔ)引擎層實(shí)現(xiàn)糜俗。如 InnoDB。

事務(wù)

通俗地講珠月,事務(wù)就是一組 SQL 要么全部執(zhí)行成功楔敌,要么全部失敗回滾。
事務(wù)的ACID概念:

  • 原子性(atomicity):一個(gè)事務(wù)是一個(gè)不可分割的最小工作單元卵凑,整個(gè)事務(wù)的所有操作要么全部執(zhí)行成功,要么全部失敗回滾伙判。
  • 一致性(consistency):事務(wù)總是從一個(gè)一致性狀態(tài)轉(zhuǎn)移到另一個(gè)一致性狀態(tài)黑忱。
  • 隔離性(isolation):通常來說,一個(gè)事務(wù)所做的修改在最終提交之前甫煞,對其他事務(wù)是不可見的⊙蛲蓿可通過設(shè)置事務(wù)的隔離級別來改變這種情況埃跷。
  • 持久性(durability):一旦事務(wù)被提交邮利,其所做的修改就會(huì)永久保存到數(shù)據(jù)庫中垃帅。
事務(wù)的隔離級別
  • READ UNCOMMITED(未提交讀):一個(gè)事務(wù)所做的修改,即使沒有提交贸诚,對其他事務(wù)也是可見的。會(huì)產(chǎn)生臟讀(Dirty Read)械念。
  • READ COMMITED(提交讀):一個(gè)事務(wù)從開始到提交之前运悲,所做的任何修改對其他事務(wù)都是不可見的。會(huì)產(chǎn)生不可重復(fù)讀班眯。(nonrepeatable read)。
  • REPEATABLE READ(可重復(fù)讀):解決了臟讀和不可重復(fù)讀的問題宠能,但是理論上還是無法解決幻讀磁餐。幻讀就是指某個(gè)事務(wù)在讀取某個(gè)范圍內(nèi)的記錄時(shí)诊霹,另一個(gè)事務(wù)又在該范圍內(nèi)插入了新的記錄,當(dāng)之前的事務(wù)再次讀取該范圍內(nèi)的記錄時(shí)肴楷,會(huì)產(chǎn)生幻行荠呐。InnoDB通過多版本并發(fā)控制解決了幻讀的問題砂客。可重復(fù)讀是MySQL默認(rèn)的隔離級別鞠值。
  • SERIALIZABLE(可串行化):強(qiáng)制事務(wù)串行執(zhí)行,避免了幻讀的問題钞钙。會(huì)在讀取的每一行上加鎖,可能導(dǎo)致大量的超時(shí)和鎖爭用的問題芒炼。并發(fā)能力很低。
死鎖

兩個(gè)或多個(gè)事務(wù)在同一資源上相互占用鲸湃,并請求鎖定對方占用的資源子寓,從而導(dǎo)致惡性循環(huán)的現(xiàn)象。當(dāng)多個(gè)事務(wù)試圖以不同的順序鎖定資源時(shí)斜友,就可能會(huì)產(chǎn)生死鎖。為了解決死鎖晒衩,數(shù)據(jù)庫系統(tǒng)實(shí)現(xiàn)了各種死鎖檢測和死鎖超時(shí)機(jī)制墙歪。InnoDB 目前的處理方法是,將持有最少行級排他鎖的事務(wù)進(jìn)行回滾虹菲。

事務(wù)日志

使用事務(wù)日志,存儲(chǔ)引擎在修改表的數(shù)據(jù)時(shí)只需要修改其內(nèi)存拷貝浪漠,再把該修改行為記錄持久在硬盤上的事務(wù)日志中霎褐,而不用每次都將修改的數(shù)據(jù)本身持久到磁盤。

MySQL中的事務(wù)

MySQL提供了兩種事務(wù)型存儲(chǔ)引擎:InnoDB 和 NDB Cluster响谓。
MySQL默認(rèn)采用自動(dòng)提交模式省艳。

  • 隱式鎖定:InnoDB 采用兩階段鎖定協(xié)議娘纷。在事務(wù)執(zhí)行過程中跋炕,隨時(shí)都可以執(zhí)行鎖定,鎖只有在執(zhí)行 COMMIT 或 ROLLBACK 的時(shí)候才會(huì)釋放遏插,并且所有的鎖是在同一時(shí)刻釋放。
  • 顯示鎖定:InnoDB 支持通過特定的語句進(jìn)行顯式鎖定胳嘲,這些語句不屬于 SQL 規(guī)范胎围。

SELECT ... LOCK IN SHARE MODE
SELECT ... FOR UPDATE

多版本并發(fā)控制

MVCC 是行級鎖的一個(gè)變種,但是它在很多情況下避免了加鎖操作白魂,因此開銷更低。通過加版本號的方式蕴坪,讓事務(wù)讀到數(shù)據(jù)的快照版本敬锐。

MySQL存儲(chǔ)引擎

InnoDB存儲(chǔ)引擎
  • InnoDB 是 MySQL 默認(rèn)的支持事務(wù)的存儲(chǔ)引擎。
  • MySQL5.6 支持全文索引台夺。
  • InnoDB 表是基于聚簇索引建立的。(數(shù)據(jù)和索引在一個(gè)文件中)聚簇索引對主鍵查詢有很高的性能梳星。不過它的二級索引必須包含主鍵列滚朵,因此主鍵不宜過大。
MyISAM存儲(chǔ)引擎
  • 不支持事務(wù)和行級鎖辕近。
  • 支持全文索引、壓縮归粉、空間函數(shù)吞杭。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末变丧,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子痒蓬,更是在濱河造成了極大的恐慌,老刑警劉巖顾复,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異萧芙,居然都是意外死亡假丧,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進(jìn)店門渔期,熙熙樓的掌柜王于貴愁眉苦臉地迎上來渴邦,“玉大人,你說我怎么就攤上這事谋梭。” “怎么了站欺?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵纤垂,是天一觀的道長。 經(jīng)常有香客問我贾虽,道長吼鱼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任地粪,我火速辦了婚禮琐谤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己旺聚,他們只是感情好眶蕉,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著碱璃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪厘贼。 梳的紋絲不亂的頭發(fā)上圣拄,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天,我揣著相機(jī)與錄音岳掐,去河邊找鬼饭耳。 笑死,一個(gè)胖子當(dāng)著我的面吹牛寞肖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播觅赊,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼琼稻,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了帕翻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤紫岩,失蹤者是張志新(化名)和其女友劉穎睬塌,沒想到半個(gè)月后歇万,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體梨与,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡粥鞋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年瞄崇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苏研。...
    茶點(diǎn)故事閱讀 39,764評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡摹蘑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出衅鹿,到底是詐尸還是另有隱情,我是刑警寧澤大渤,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布泵三,位于F島的核電站,受9級特大地震影響烫幕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜凌埂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一诗芜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧伏恐,春花似錦、人聲如沸横蜒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至抚垄,卻和暖如春谋逻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背毁兆。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留纺腊,地道東北人茎芭。 一個(gè)月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像骗爆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子煮寡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評論 2 354

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