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

頻繁插入(insert)的業務,用什么存儲引擎更合適? | 數據庫系列

開發 開發工具 MySQL
繼續回答星球水友提問:沈老師,MyISAM只支持表鎖,但網上文章卻說,在并發插入量比較大的時候,比較適合使用MyISAM,這矛盾嗎?

繼續回答星球水友提問:

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

這個問題,涉及MySQL表鎖的一些細節,借著這個問題,系統性說下表鎖的“所以然”。

畫外音:網上不少文章只說結論,不說為什么,容易讓人蒙圈。

MySQL表鎖知識系統性梳理。

[[278134]]

哪些存儲引擎使用表鎖?

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

表鎖有什么好處?

  • 表鎖占用內存少很多,行鎖的數量與行記錄數相關,非常耗內存;
  • 如果業務經常讀寫表中很大一部分數據時,表鎖會更快,因為此時只涉及一個鎖,而不是同時管理N多個鎖;
  • 如果業務經常使用group by,表鎖會更快,原因同(2);

畫外音:這樣的一些場景,使用MyISAM比InnoDB更優。

表鎖是怎么運作的?

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

寫時,要加寫鎖:

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

讀時,要加讀鎖:

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

表鎖釋放時:

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

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

如何查看表鎖情況?

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

  • able_locks_immediate:立刻獲得表鎖的次數;
  • Table_locks_waited:需要等待表鎖的次數;

這兩個變量。

使用以下命令查看:

  1. show status like 'Table%'; 

如果等待表鎖的次數占比較大,說明表鎖可能是潛在瓶頸。 說了半天,還是沒有講到點子上,為什么在并發插入量比較大的時候,比較適合使用MyISAM呢?不會因為表鎖頻繁沖突而導致吞吐量降低嗎?

畫外音:知識的系統性,比問題答案更重要。

知識點一:

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

 知識點二:

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

如上圖所示:

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

知識點三:

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

空洞是怎么導致的?

刪除或者修改數據,都可能導致空洞。

 

如上圖所示:

  • 中間刪除了一些數據,導致中間出現空閑塊(free blocks);
  • 此時,select和insert會有表鎖沖突,無法并發;

再如上圖所示:

  • 隨著插入的進行,中間的空閑塊又被填滿了;
  • 此時,并發select和insert又恢復了;

結論

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

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

希望解答了這位水友的疑問。

【本文為51CTO專欄作者“58沈劍”原創稿件,轉載請聯系原作者】

戳這里,看該作者更多好文

 

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2022-11-09 10:26:27

存儲引擎MySQL數據庫

2018-05-02 08:40:36

存儲密碼字符

2022-06-15 08:23:42

開發模式mainlinePR

2009-02-02 09:31:25

MySQL存儲引擎MyISAM

2011-09-30 09:14:29

云計算

2011-08-05 14:31:04

mysql_conve批量轉換MYSQL數據MYISAM

2011-08-01 23:08:33

MySQL存儲引擎

2021-02-21 06:33:27

存儲引擎物聯網

2023-04-03 08:00:00

數據庫NoSQL

2020-06-17 15:01:30

物聯網數據庫物聯網數據庫

2017-06-19 16:20:09

數據庫性能工具

2016-10-08 18:13:55

數據庫性能工具數據庫管理系統

2020-01-10 10:58:34

ZooKeeperEureka注冊中心

2025-04-09 08:20:00

2012-06-08 09:30:51

Access

2020-11-24 17:22:15

數據庫MySQL技術

2025-05-09 02:20:00

2009-05-08 09:17:48

動態數據庫圖片

2019-07-23 15:34:29

MySQL存儲引擎
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品视频一二三 | 亚洲欧美日韩精品久久亚洲区 | 6996成人影院网在线播放 | 免费一区在线观看 | 午夜一区二区三区在线观看 | 超碰在线免费av | 亚洲成人日韩 | 色就是色欧美 | 欧美偷偷| 久国久产久精永久网页 | 国产精品国产自产拍高清 | 国产一区二区久久 | 国产 日韩 欧美 在线 | 亚洲精品一区二区三区 | 精品久久精品 | 欧美一级免费 | 国产精品综合久久 | 老头搡老女人毛片视频在线看 | jizz视频| 黄色三级毛片 | 国产精品婷婷 | 97精品超碰一区二区三区 | 国产精品区二区三区日本 | 亚洲黄色一区二区三区 | 成人av观看 | 波多野结衣电影一区 | 国产98色在线 | 日韩 | 亚洲免费网站 | 一区二区手机在线 | 国产真实乱全部视频 | 亚洲喷水 | 污片在线免费观看 | 久久手机在线视频 | 性欧美xxxx | 国产精久久久久久久妇剪断 | 久久99久久98精品免观看软件 | 久久久精品影院 | 国产高清在线观看 | 在线播放一区二区三区 | 美女视频. | 国产性生活一级片 |