日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
頻繁插入,用什么存儲(chǔ)引擎更合適?

?有童鞋在后臺(tái)留言:

創(chuàng)新互聯(lián)專注于中大型企業(yè)的網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)和網(wǎng)站改版、網(wǎng)站營(yíng)銷服務(wù),追求商業(yè)策劃與數(shù)據(jù)分析、創(chuàng)意藝術(shù)與技術(shù)開(kāi)發(fā)的融合,累計(jì)客戶上1000+,服務(wù)滿意度達(dá)97%。幫助廣大客戶順利對(duì)接上互聯(lián)網(wǎng)浪潮,準(zhǔn)確優(yōu)選出符合自己需要的互聯(lián)網(wǎng)運(yùn)用,我們將一直專注高端網(wǎng)站設(shè)計(jì)和互聯(lián)網(wǎng)程序開(kāi)發(fā),在前進(jìn)的路上,與客戶一起成長(zhǎng)!

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

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

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

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

哪些存儲(chǔ)引擎使用表鎖??

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

表鎖有什么好處??

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

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

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

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

表鎖是怎么運(yùn)作的??

和其他臨界資源的讀寫(xiě)鎖類似。

寫(xiě)時(shí),要加寫(xiě)鎖:

  • 如果表沒(méi)有鎖,對(duì)表加寫(xiě)鎖;
  • 否則,入寫(xiě)鎖隊(duì)列;

讀時(shí),要加讀鎖:

  • 如果表沒(méi)有寫(xiě)鎖,對(duì)表加讀鎖;
  • 否則,入讀鎖隊(duì)列;

表鎖釋放時(shí):

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

畫(huà)外音:潛臺(tái)詞是,如果有大量并發(fā)update請(qǐng)求,select會(huì)等所有update請(qǐng)求執(zhí)行完才執(zhí)行。?

如何查看表鎖情況??

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

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

這兩個(gè)變量。

使用以下命令查看:

show status like 'Table%';

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

說(shuō)了半天,還是沒(méi)有講到點(diǎn)子上,為什么在并發(fā)插入量比較大的時(shí)候,比較適合使用MyISAM呢?不會(huì)因?yàn)楸礞i頻繁沖突而導(dǎo)致吞吐量降低嗎??

畫(huà)外音:知識(shí)的系統(tǒng)性,比問(wèn)題答案更重要。?

知識(shí)點(diǎn)一:?

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

這個(gè)知識(shí)點(diǎn)就不展開(kāi)了,以前講過(guò)。

知識(shí)點(diǎn)二:?

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

如上圖所示:

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

知識(shí)點(diǎn)三:?

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

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

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

如上圖所示:

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

再如上圖所示:

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

結(jié)論

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

畫(huà)外音:本文基于MySQL5.6。?

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


新聞名稱:頻繁插入,用什么存儲(chǔ)引擎更合適?
文章路徑:http://m.5511xx.com/article/cospcsd.html