成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

頻繁插入,用什么存儲引擎更合適?

數(shù)據(jù)庫 MySQL
MyISAM只支持表鎖,但網(wǎng)上文章卻說,在并發(fā)插入量比較大的時候,比較適合使用MyISAM,這矛盾嗎?

?有童鞋在后臺留言:

沈老師,MyISAM只支持表鎖,但網(wǎng)上文章卻說,在并發(fā)插入量比較大的時候,比較適合使用MyISAM,這矛盾嗎??

這個問題,涉及MySQL表鎖的一些細(xì)節(jié),借著這個問題,系統(tǒng)性說下表鎖的“所以然”。

畫外音:網(wǎng)上不少文章只說結(jié)論,不說為什么,容易讓人蒙圈。?

MySQL表鎖知識系統(tǒng)性梳理。

哪些存儲引擎使用表鎖??

MySQL,除InnoDB支持行鎖外,MySQL的其他存儲引擎均只使用表鎖,例如:MyISAM, MEMORY, MERGE等。

表鎖有什么好處??

(1) 表鎖占用內(nèi)存少很多,行鎖的數(shù)量與行記錄數(shù)相關(guān),非常耗內(nèi)存;

(2) 如果業(yè)務(wù)經(jīng)常讀寫表中很大一部分?jǐn)?shù)據(jù)時,表鎖會更快,因為此時只涉及一個鎖,而不是同時管理N多個鎖;

(3) 如果業(yè)務(wù)經(jīng)常使用group by,表鎖會更快,原因同(2);

畫外音:這樣的一些場景,使用MyISAM比InnoDB更優(yōu)。?

表鎖是怎么運作的??

和其他臨界資源的讀寫鎖類似。

寫時,要加寫鎖:

  • 如果表沒有鎖,對表加寫鎖;
  • 否則,入寫鎖隊列;

讀時,要加讀鎖:

  • 如果表沒有寫鎖,對表加讀鎖;
  • 否則,入讀鎖隊列;

表鎖釋放時:

如果寫鎖隊列和讀鎖隊列里都有鎖,寫有更高的優(yōu)先級,即寫鎖隊列先出列。這么做的原因是,如果有“大查詢”,可能會導(dǎo)致寫鎖被批量“餓死”,而寫鎖往往釋放很快。

畫外音:潛臺詞是,如果有大量并發(fā)update請求,select會等所有update請求執(zhí)行完才執(zhí)行。?

如何查看表鎖情況??

如果要分析表鎖沖突情況,可查看:

  • Table_locks_immediate:立刻獲得表鎖的次數(shù);
  • Table_locks_waited:需要等待表鎖的次數(shù);

這兩個變量。

使用以下命令查看:

show status like 'Table%';

圖片

如果等待表鎖的次數(shù)占比較大,說明表鎖可能是潛在瓶頸。

說了半天,還是沒有講到點子上,為什么在并發(fā)插入量比較大的時候,比較適合使用MyISAM呢?不會因為表鎖頻繁沖突而導(dǎo)致吞吐量降低嗎??

畫外音:知識的系統(tǒng)性,比問題答案更重要。?

知識點一:?

MyISAM的索引與記錄存儲分離,有單獨的區(qū)域存儲行記錄,PK是非聚集索引。

圖片

這個知識點就不展開了,以前講過。

知識點二:?

MyISAM表,如果數(shù)據(jù)文件(data file)緊密存儲,中間沒有空閑塊(free blocks),數(shù)據(jù)總是插入到數(shù)據(jù)文件的尾部(end),就如同追加日志一樣,性能很高,此時的并發(fā)insert與select是不加鎖的(lock free)。

圖片

如上圖所示:

  • 數(shù)據(jù)文件連續(xù)且緊密的存儲著;
  • 并發(fā)insert無表鎖爭搶(只需插入隊列互斥);
  • insert只在數(shù)據(jù)文件的尾部進(jìn)行;
  • 并發(fā)select也能夠同時進(jìn)行(共享讀鎖);

知識點三:?

MyISAM表,如果數(shù)據(jù)文件(data file)中間有空洞(hole),上述機制會失效,直到空洞被新數(shù)據(jù)填滿,又會啟用不加鎖機制。

空洞是怎么導(dǎo)致的??

刪除或者修改數(shù)據(jù),都可能導(dǎo)致空洞。

圖片

如上圖所示:

  • 中間刪除了一些數(shù)據(jù),導(dǎo)致中間出現(xiàn)空閑塊(free blocks);
  • 此時,select和insert會有表鎖沖突,無法并發(fā);

圖片

再如上圖所示:

  • 隨著插入的進(jìn)行,中間的空閑塊又被填滿了;
  • 此時,并發(fā)select和insert又恢復(fù)了;

結(jié)論

雖然MyISAM只支持表鎖,但高并發(fā)select與insert的業(yè)務(wù)場景,上述機制使得MyISAM的表鎖依然有非常強勁的性能。

畫外音:本文基于MySQL5.6。?

思路比結(jié)論重要,希望大家有收獲。?

責(zé)任編輯:趙寧寧 來源: 架構(gòu)師之路
相關(guān)推薦

2019-09-27 18:13:59

MySQL索引數(shù)據(jù)庫

2018-05-02 08:40:36

存儲密碼字符

2011-09-30 09:14:29

云計算

2022-06-15 08:23:42

開發(fā)模式mainlinePR

2009-02-02 09:31:25

MySQL存儲引擎MyISAM

2020-01-10 10:58:34

ZooKeeperEureka注冊中心

2025-04-09 08:20:00

2009-12-16 09:58:35

Chrome OS

2024-06-03 09:44:33

2025-05-28 00:00:00

CSS前端Flexbox

2020-01-02 13:44:31

互聯(lián)網(wǎng)工業(yè)物聯(lián)網(wǎng)安全

2023-05-04 07:16:56

U盤USB接口USB-A接口

2013-07-02 12:11:52

華為TD-LTE中國移動

2023-02-22 16:47:09

編程語言RustGolang

2013-05-23 16:28:22

TD-LTE4G移動通信網(wǎng)絡(luò)

2019-03-11 15:48:13

企業(yè)存儲數(shù)據(jù)

2024-01-25 10:23:22

對象存儲存儲數(shù)據(jù)

2023-05-09 16:25:57

Azure 存儲文件存儲

2020-01-09 13:24:31

Python 開發(fā)編程語言

2011-08-11 09:49:33

SQL Server 存儲過程插入更新數(shù)據(jù)
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 黄片毛片在线观看 | 国产免费福利在线 | 亚洲 欧美 另类 日韩 | 三级免费av| 亚洲免费观看视频 | 天堂资源 | 91一区二区三区 | 中文精品视频 | 日韩在线精品视频 | av网站在线看 | 日韩激情在线 | 伊人精品在线 | 爱草在线| 欧美aⅴ | 国产精品久久久久久久久久免费看 | 中文字幕视频在线观看 | 亚洲国产精品美女 | 精品av天堂毛片久久久借种 | 在线观看中文字幕 | 精品亚洲一区二区三区 | 一级免费a | 久久久精品天堂 | 福利影院在线看 | 国产成人精品一区二 | 亚洲精品一区二区三区中文字幕 | 国产精品xxxx | 日本又色又爽又黄的大片 | 日韩精品中文字幕在线 | 伦理片97 | 日韩精品免费 | 日韩精品视频在线 | 久久51| 黄视频在线网站 | 国产成人精品久久 | 国产精品美女久久久久久久久久久 | 国产免费a视频 | 国产成人免费视频网站高清观看视频 | 中文字幕在线一 | 国产免费一二三区 | 国产极品车模吞精高潮呻吟 | 99免费精品 |