數(shù)據(jù)庫存儲引擎2020-08-12

數(shù)據(jù)庫存儲引擎

image.png

服務(wù)層

第二層是MySQL的核心,MySQL的核心服務(wù)層都在這一層挑随,查看解析状您,SQL執(zhí)行計劃、SQL執(zhí)行計劃優(yōu)化、查詢緩存膏孟。以及跨存儲引擎的功能都在這一層實現(xiàn):存儲功能眯分、觸發(fā)器、視圖等柒桑。通過下圖來觀察服務(wù)層的內(nèi)部結(jié)構(gòu)弊决。


image.png

存儲引擎層

負(fù)責(zé)MySQL中數(shù)據(jù)的存儲和提取。服務(wù)器中的查詢執(zhí)行引擎通過AP與存儲引擎通信魁淳,通過接口屏蔽了不同存儲引擎之間的差異飘诗。MySQL采用插件式的存儲引擎。MySQL為我們提供了很多的存儲引擎界逛,每種存儲引擎有不同的特點昆稿。我們根據(jù)不同的業(yè)務(wù)特點,選擇最合適的存儲引擎息拜。如果對于存儲引擎的性能不滿意溉潭,可以通過修改源碼來達(dá)到自己想要的性能。例如阿里巴巴的X-engine少欺,為了滿足企業(yè)需求facebook和goole都對InnoDB進(jìn)行了擴(kuò)充喳瓣。

查看存儲引擎

show engines;

MySQL引擎之MyISAM

MySQL5.5之前的版本默認(rèn)存儲引擎

MyISAM存儲引擎表有MYD(數(shù)據(jù)文件)和MYI(索引文件)組成。

什么是鎖

鎖主要是管理共享資源的并發(fā)訪問狈茉。

鎖用于實現(xiàn)事務(wù)的隔離性

鎖的類型

  • 共享鎖(也稱讀鎖)夫椭,針對同一份數(shù)據(jù),多個操作可以同時進(jìn)行不相互影響
  • 獨占鎖(也稱寫鎖)氯庆,當(dāng)前寫操作沒有完成前蹭秋,他會阻斷其他寫鎖和讀鎖

鎖的粒度

  • 表級鎖
  • 行級鎖

MyISAM

  • 并發(fā)性與鎖級別
  • 表損壞修復(fù)
repair table 表名稱;
  • MyISAM表支持?jǐn)?shù)據(jù)壓縮(如果表中數(shù)據(jù)發(fā)生變化就要重新壓縮)
myisampack -b -f myIsam.MYI
  • 節(jié)約空間
  • 訪問速度快

MyISAM存儲引擎限制

  • 版本<MySQL5.0時默認(rèn)表大小為4G,如存儲大表則要修改MAX_Rows和AVG_ROW_LENGTH
  • 版本>MySQL5.0是默認(rèn)支持256TB

事務(wù)場景

  • 非事務(wù)性應(yīng)用
  • 只讀類應(yīng)用

MySQL引擎之InnoDB

MySQL引擎之InnoDB

MySQL5.5 及之后版本默認(rèn)存儲引擎,支持事務(wù)的ACID特性

Innodb使用表空間進(jìn)行數(shù)據(jù)存儲

show variables like 'innodb_file_per_table';
默認(rèn)on
set global variables=off;
設(shè)置為off  

on:獨立表空間堤撵,tablename.ibd(在所屬數(shù)據(jù)庫目錄文件下)
off:系統(tǒng)表空間:ibdataX X是一個數(shù)字(在data目錄文件下)

系統(tǒng)表空間和獨立表空間如何選擇

  • 系統(tǒng)表空間會產(chǎn)生IO瓶頸仁讨,刷新數(shù)據(jù)是順序進(jìn)行的所以會產(chǎn)生文件的IO瓶頸
  • 獨立表空間可以同時向多個文件刷新數(shù)據(jù)

Innodb存儲引擎的特性

  • 支持事務(wù)的ACID特性
  • Innodb支持行級鎖,可以最大程度的支持并發(fā)

MyISAM和InnoDB對比

image.png

MySQL引擎之CSV

MySQL引擎之CSV

文件存儲特點

數(shù)據(jù)以文本方式存儲在文件中
.csv文件存儲表內(nèi)容
.csm文件存儲表的元數(shù)據(jù)如表狀態(tài)和數(shù)據(jù)量
.frm文件存儲表結(jié)構(gòu)信息

特點

以csv格式進(jìn)行存儲
注意:- 該類型文件不支持自增
- 不支持索引
- 不支持空的字段

使用場景

  • 適合作為數(shù)據(jù)交換的中間表

MySQL引擎之Memory

MySQL引擎之Memory

也稱heap存儲引擎实昨,所有數(shù)據(jù)保存在內(nèi)存中洞豁,如果重啟MySQL服務(wù)數(shù)據(jù)會丟失,但是表結(jié)構(gòu)會保存下來

功能特點

  • 支持hash索引和btree索引
    • 一般默認(rèn)為hash索引
    • 設(shè)置為btree索引語法
create index 索引名稱 using btree on 表名稱(字段名稱);
  • 所有字段都為固定長度 varchar(10)=char(10)
  • 不支持blog和text等大字段
  • Memory存儲引擎使用表級鎖

如何選擇存儲引擎

大部分情況下荒给,InnoDB都是正確的選擇丈挟,可以簡單的歸納為一句話“除非需要用到InnoDB不具有的特性,并且沒有其他辦法可以替代志电,否則都應(yīng)該優(yōu)先選擇InnoDB存儲引擎”

參考條件

事務(wù)

如果應(yīng)用需要事務(wù)支持曙咽,那么InnoDB或者XtraDB是目前最穩(wěn)定和經(jīng)過驗證的選擇

備份

如果可以定期的關(guān)閉服務(wù)器來執(zhí)行備份,那么備份的因素可以忽略挑辆。反之例朱,如果需要在線熱備份孝情,那么選擇InnoDB就是基本的要求

崩潰恢復(fù)

MyISAM據(jù)庫存儲引擎

應(yīng)用舉例

  • 日志型應(yīng)用(MyISM)
  • 只讀或者大部分情況下只讀的表(MyISM)
  • 訂單處理(InnoDB)

MySQL基準(zhǔn)測試

什么是基準(zhǔn)測試

基準(zhǔn)測試是一種測量和評估軟件性能指標(biāo)的活動用于建立某個時刻的性能基準(zhǔn),以便當(dāng)系統(tǒng)發(fā)生軟硬件變化時重新進(jìn)行基準(zhǔn)測試以評估變化對性能的影響洒嗤。

基準(zhǔn)測試是針對系統(tǒng)設(shè)置的一種壓力測試

基準(zhǔn)測試特點

直接箫荡、簡潔、易于比較渔隶,用于評估服務(wù)器的處理能力

可能不關(guān)心業(yè)務(wù)邏輯羔挡,所使用的查詢和業(yè)務(wù)的真實性可以和業(yè)務(wù)環(huán)境沒關(guān)系

壓力測試特點

  • 對真實的業(yè)務(wù)數(shù)據(jù)進(jìn)行測試,獲得真實業(yè)務(wù)系統(tǒng)所能承受的能力
  • 需要針對不同主題派撕,所使用到的數(shù)據(jù)和查詢也是真實用到的
  • 基準(zhǔn)測試就是簡化了壓力測試

基準(zhǔn)測試的目的

  • 建立MySQL服務(wù)器的性能基準(zhǔn)線婉弹,確定當(dāng)前MySQL服務(wù)器的運(yùn)行情況,確定優(yōu)化之后的效果
  • 模擬比當(dāng)前系統(tǒng)更高的負(fù)載终吼,以找出系統(tǒng)的擴(kuò)展瓶頸镀赌,可以增加數(shù)據(jù)庫并發(fā),觀察QPS(每秒處理查詢數(shù))际跪,TPS(每秒處理事務(wù)數(shù))變化商佛,確定并發(fā)量與性能最優(yōu)關(guān)系
  • 測試不同硬件、軟件和操作系統(tǒng)的配置
  • 證明新的硬件設(shè)備是否配置正確

如何進(jìn)行基準(zhǔn)測試

對整個系統(tǒng)進(jìn)行基準(zhǔn)測試

優(yōu)點
  • 能測試整個系統(tǒng)的性能姆打,包括服務(wù)器緩存良姆、數(shù)據(jù)庫等
  • MySQL并不總是出現(xiàn)性能問題的瓶頸,如果只關(guān)注MySQL可能會忽略其他問題幔戏,能反映出系統(tǒng)中各個組件接口間的性能問題玛追,體現(xiàn)真實性能情況
缺點
  • 基準(zhǔn)測試最主要的就是簡單,可能對不同的方案進(jìn)行測試闲延,找到最優(yōu)的方案痊剖,基準(zhǔn)測試進(jìn)行的時間一定要短,否則就要花費(fèi)大量的時間進(jìn)行基準(zhǔn)測試垒玲。
  • 測試復(fù)雜陆馁,消耗時間長

對MySQL進(jìn)行基準(zhǔn)測試

優(yōu)點
  • 測試設(shè)計簡單,消耗時間短
缺點
  • 無法全面了解真?zhèn)€系統(tǒng)的性能基線

MySQL基準(zhǔn)測試的常見指標(biāo)

  • 單位時間內(nèi)處理的事務(wù)數(shù)(TPS)
  • 單位時間內(nèi)處理的查詢數(shù)(QPS)

MySQL基準(zhǔn)測試工具

MySQL基準(zhǔn)測試之mysqlslap

  • 可以模擬服務(wù)器負(fù)載合愈,輸出相關(guān)統(tǒng)計信息

常用參數(shù)說明

  • --auto-generate-sql 由系統(tǒng)自動生成SQL腳本進(jìn)行測試
  • --auto-generate-sql-add-autoincrement 在生成的表中增加自增ID
  • --auto-generate-sql-load-type 指定測試中使用的查詢類型 讀寫或者混合,默認(rèn)是混合
  • --auto-generate-sql-write-number 指定初始化數(shù)據(jù)時生成的數(shù)據(jù)量
  • --concurrency 指定并發(fā)線程的數(shù)量 1,10,50,200
  • --engine 指定要測試表的存儲引擎,可以用逗號分割多個存儲引擎
  • --no-drop 指定不清理測試數(shù)據(jù)
  • --iterations 指定測試運(yùn)行的次數(shù) 指定了這個不能指定no-drop
  • --number-of-queries 指定每一個線程執(zhí)行的查詢數(shù)量
  • --debug-info 指定輸出額外的內(nèi)存及CPU統(tǒng)計信息
  • --number-int-cols 指定測試表中包含的INT類型列的數(shù)量
  • --number-char-cols 指定測試表中包含的varchar類型的數(shù)量
  • --create-schema 指定了用于執(zhí)行測試的數(shù)據(jù)庫的名字
  • --query 用于指定自定義SQL的腳本
  • --only-print 并不運(yùn)行測試腳本,而是把生成的腳本打印出來
  • 一條測試語句
mysqlslap --concurrency=1,50,100,200 --iterations=3 --number-int-cols=5 --number-char-cols=5 --auto-generate-sql --auto-generate-sql-add-autoincrement --engine=myisam,innodb --number-of-queries=10 --create-schema=test  -uroot -proot

sysbench測試工具:
https://www.cnblogs.com/kismetv/archive/2017/09/30/7615738.html

image.png

image.png

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末叮贩,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子佛析,更是在濱河造成了極大的恐慌益老,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寸莫,死亡現(xiàn)場離奇詭異捺萌,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)储狭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進(jìn)店門互婿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人辽狈,你說我怎么就攤上這事慈参。” “怎么了刮萌?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵驮配,是天一觀的道長。 經(jīng)常有香客問我着茸,道長壮锻,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任涮阔,我火速辦了婚禮猜绣,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘敬特。我一直安慰自己掰邢,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布伟阔。 她就那樣靜靜地躺著辣之,像睡著了一般。 火紅的嫁衣襯著肌膚如雪皱炉。 梳的紋絲不亂的頭發(fā)上怀估,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天,我揣著相機(jī)與錄音合搅,去河邊找鬼多搀。 笑死,一個胖子當(dāng)著我的面吹牛历筝,可吹牛的內(nèi)容都是我干的酗昼。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼梳猪,長吁一口氣:“原來是場噩夢啊……” “哼麻削!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起春弥,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤呛哟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后匿沛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扫责,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年逃呼,在試婚紗的時候發(fā)現(xiàn)自己被綠了鳖孤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片者娱。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖苏揣,靈堂內(nèi)的尸體忽然破棺而出黄鳍,到底是詐尸還是另有隱情,我是刑警寧澤平匈,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布框沟,位于F島的核電站,受9級特大地震影響增炭,放射性物質(zhì)發(fā)生泄漏忍燥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一隙姿、第九天 我趴在偏房一處隱蔽的房頂上張望梅垄。 院中可真熱鬧,春花似錦输玷、人聲如沸哎甲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽炭玫。三九已至,卻和暖如春貌虾,著一層夾襖步出監(jiān)牢的瞬間吞加,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工尽狠, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留衔憨,地道東北人。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓袄膏,卻偏偏與公主長得像践图,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子沉馆,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,092評論 2 355