《高性能MySQL》學(xué)習(xí)筆記一架構(gòu)和歷史

????每個客戶端連接都會在服務(wù)器進(jìn)程中擁有一個線程传趾,該連接的所有查詢只會在這個單獨線程中執(zhí)行迎膜。5.5版本后提供一個API來支持線程池插件。

? ? 并發(fā)問題一般是通過實現(xiàn)一個由兩種類型的鎖組成的鎖系統(tǒng)來解決問題浆兰,這兩種類型的鎖通常被稱為共享鎖(讀鎖)和排他鎖(寫鎖)磕仅。讀鎖是共享的,也就是說同一時刻多個客戶讀取同一個資源將互不干擾簸呈;寫鎖時排他的榕订,就是說只有一個客戶在寫入,且寫入的時候必須防止其他用戶讀取正在寫入的資源蜕便。

????需要調(diào)整自己的鎖策略劫恒,來在特定的應(yīng)用場景下提供更好的性能(平衡并發(fā)性以及鎖開銷),而不是僅僅簡單的使用行級鎖轿腺,而MySQL的多個存儲引擎都會自己的鎖策略和鎖粒度两嘴。

事務(wù)

????事務(wù)的ACID特性。

????事務(wù)的四種隔離級別:

未提交讀:事務(wù)的修改對其他事務(wù)都是可見的族壳,可能帶來臟讀

提交讀:大多數(shù)數(shù)據(jù)庫支持憔辫,事務(wù)只能看見已提交的事務(wù)所做的修改,這個級別也叫不可重復(fù)讀仿荆,即兩次執(zhí)行同樣的查詢可能得到不同結(jié)果

可重復(fù)讀:MySQL默認(rèn)的事務(wù)隔離級別贰您,解決了臟讀坏平,保證同一個事務(wù)多次讀取同樣的結(jié)果是一致的。但是無法解決幻讀枉圃。(InnoDB和XtraDB存儲引擎通過MVCC解決了幻讀問題)

可串行化:最高隔離級別功茴,強制事務(wù)串行執(zhí)行。

?????除非事務(wù)中禁用了AUTOCOMMIT孽亲,否則任何時刻都不能顯式地執(zhí)行LOCK TABLES坎穿,不管使用的是什么存儲引擎,否則如果LOCK TABLES和事務(wù)相互影響的話情況會變得很復(fù)雜返劲。

MVCC

????MySQL大多數(shù)存儲引擎實現(xiàn)的并不是簡單的行級鎖玲昧,它們一般同時實現(xiàn)了多版本并發(fā)控制(MVCC)。MVCC是行級鎖的一個變種篮绿,很多情況下都避免了加鎖孵延,因此開銷更低,大多數(shù)MVCC都實現(xiàn)了非阻塞的讀操作亲配,寫操作也只鎖定必要的行尘应。

????InnoDB的MVCC是通過在每行記錄后面保存兩個隱藏的列來實現(xiàn)的,這兩個列一個保存了行的創(chuàng)建時間吼虎,一個保存了行的過期時間即版本號犬钢,事務(wù)開始的系統(tǒng)版本號會作為事務(wù)版本號,用來和查詢到的每行記錄的版本號進(jìn)行比較思灰,來達(dá)到一定的隔離級別玷犹。

????這樣做可以使大多數(shù)讀操作可以不用加鎖,可以使得讀操作簡單且性能好洒疚,并且保證只會讀取到符合標(biāo)準(zhǔn)的行歹颓。不足之處在于每行記錄都需要額外的存儲空間,需要做更多的行檢查工作以及一些額外的維護工作油湖。

????MVCC只在提交讀和可重復(fù)讀兩個隔離級別下工作巍扛,其他兩個隔離級別都與MVCC不兼容。

存儲引擎

????使用.frm文件保存表的定義乏德。

????InnoDB存儲引擎數(shù)據(jù)存儲在表空間中电湘;采用MVCC來支持高并發(fā)并實現(xiàn)了四個標(biāo)準(zhǔn)的隔離級別,并且使用間隙鎖來防止出現(xiàn)幻讀(間隙鎖使得不僅僅鎖定查詢涉及的行鹅经,還會對索引中的間隙進(jìn)行鎖定寂呛,防止幻影行的插入);基于聚簇索引建立的瘾晃,其對主鍵查詢有很高的性能贷痪,但其二級索引必須包含主鍵列,所以表上索引過多的話主鍵必須盡可能斜奈蟆劫拢;內(nèi)部優(yōu)化很多肉津,包括磁盤可預(yù)測性預(yù)讀、內(nèi)存中創(chuàng)建hash索引加速讀舱沧、增加插入緩沖區(qū)等妹沙。

????MyISAM存儲引擎在只有只讀數(shù)據(jù),小表和可容忍修復(fù)操作的表依然可以使用熟吏。將表存儲在兩個文件中距糖,數(shù)據(jù)文件(.MYD)和索引文件(.MYI);可以包含動態(tài)和靜態(tài)行牵寺,動態(tài)行可處理的數(shù)據(jù)量默認(rèn)是256TB悍引,需要調(diào)節(jié)指針長度來實現(xiàn)調(diào)節(jié)數(shù)據(jù)量大小(通過修改表的MAX_ROWS和AVG_ROW_LENGTH選項的值來實現(xiàn))帽氓;對于不再修改的表可以使用壓縮表提升查詢性能趣斤。

????其他存儲引擎:

Archive引擎:只支持插入和查詢,不是一個事務(wù)型引擎黎休,而是對高速插入和壓縮做了優(yōu)化浓领,每次查詢都需要全表掃描,適用于日志和數(shù)據(jù)采集類應(yīng)用势腮。

Blackhole引擎:沒有實現(xiàn)任何存儲機制镊逝,會丟棄所有插入數(shù)據(jù),不做任何保存嫉鲸,不推薦的引擎。

CSV引擎:可以將普通CSV文件(逗號分隔值的文件)作為MySQL的表來處理歹啼,不支持索引玄渗,可作為一種數(shù)據(jù)交換的機制。

Federated引擎:是訪問其他MySQL服務(wù)器的一個代理狸眼,會創(chuàng)建一個到遠(yuǎn)程MySQL服務(wù)器的客戶端連接藤树,然后當(dāng)一個中間人的作用,但是經(jīng)常帶來問題拓萌,默認(rèn)禁用岁钓。

Memory引擎:用于那些需要快速地訪問數(shù)據(jù),并且數(shù)據(jù)不會被修改微王,重啟后丟失也沒關(guān)系的表可以使用Memory表屡限,該引擎因為所有數(shù)據(jù)都保存在內(nèi)存中,所以比MyISAM表快一個數(shù)量級(不需要進(jìn)行磁盤I/O)炕倘。Memory表重啟后結(jié)構(gòu)會保存但是數(shù)據(jù)將丟失钧大。存在表級鎖,并發(fā)能力低罩旋,不支持BLOB或TEXT類型的列啊央,并且每行長度是固定的眶诈。如果MySQL在執(zhí)行查詢的過程中需要使用臨時表來保存中間結(jié)果,內(nèi)部使用的臨時表就是Memory表瓜饥,但是當(dāng)中間結(jié)果超過表的限制時逝撬,或者含有BLOB或TEXT類型,臨時表會轉(zhuǎn)換成MyISAM表乓土。

Merge引擎:MyISAM引擎的變種宪潮,是多個MyISAM表合并而來的虛擬表。但當(dāng)引入分區(qū)功能后帐我,該引擎被棄用坎炼。

NDB集群引擎:MySQL集群引擎。

????除非需要用到某些InnoDB不具備的特性拦键,并且沒有其他辦法可以替代谣光,否則都應(yīng)該優(yōu)先選擇InnoDB引擎。除非萬不得已芬为,否則建議不要混合使用多種存儲引擎萄金,否則可能帶來一系列復(fù)雜問題。

????轉(zhuǎn)換存儲引擎的方式有:ALTER TABLE(嚴(yán)重消耗系統(tǒng)I/O能力)媚朦、導(dǎo)出與導(dǎo)入(注意可能導(dǎo)致的數(shù)據(jù)丟失操作)氧敢、創(chuàng)建與查詢(CREATE...LIKE,ALTER TABLE询张,INSERT..SELECT孙乖,數(shù)據(jù)量大時需考慮分批,必要時可加表鎖來保證強一致性)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末份氧,一起剝皮案震驚了整個濱河市唯袄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蜗帜,老刑警劉巖恋拷,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異厅缺,居然都是意外死亡蔬顾,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門湘捎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來诀豁,“玉大人,你說我怎么就攤上這事窥妇∏胰” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵秩伞,是天一觀的道長逞带。 經(jīng)常有香客問我欺矫,道長,這世上最難降的妖魔是什么展氓? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任穆趴,我火速辦了婚禮,結(jié)果婚禮上遇汞,老公的妹妹穿的比我還像新娘未妹。我一直安慰自己,他們只是感情好空入,可當(dāng)我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布络它。 她就那樣靜靜地躺著,像睡著了一般歪赢。 火紅的嫁衣襯著肌膚如雪化戳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天埋凯,我揣著相機與錄音点楼,去河邊找鬼。 笑死白对,一個胖子當(dāng)著我的面吹牛掠廓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播甩恼,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蟀瞧,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了条摸?” 一聲冷哼從身側(cè)響起悦污,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎屈溉,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體抬探,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡子巾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了小压。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片线梗。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖怠益,靈堂內(nèi)的尸體忽然破棺而出仪搔,到底是詐尸還是另有隱情,我是刑警寧澤蜻牢,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布烤咧,位于F島的核電站偏陪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏煮嫌。R本人自食惡果不足惜笛谦,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望昌阿。 院中可真熱鬧饥脑,春花似錦、人聲如沸懦冰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽刷钢。三九已至笋颤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間闯捎,已是汗流浹背椰弊。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留瓤鼻,地道東北人秉版。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像茬祷,于是被迫代替她去往敵國和親清焕。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,033評論 2 355

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