精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

dyquk4xk2p3d ? 來源:良許Linux ? 作者:良許Linux ? 2022-10-09 11:47 ? 次閱讀

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

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

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)常讀寫表中很大一部分?jǐn)?shù)據(jù)時(shí),表鎖會(huì)更快,因?yàn)榇藭r(shí)只涉及一個(gè)鎖,而不是同時(shí)管理N多個(gè)鎖;

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

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

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

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

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

(1)如果表沒有鎖,對(duì)表加寫鎖;

(2)否則,入寫鎖隊(duì)列;

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

(1)如果表沒有寫鎖,對(duì)表加讀鎖;

(2)否則,入讀鎖隊(duì)列;

表鎖釋放時(shí):

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

畫外音:潛臺(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%’;

b2febc4a-45e5-11ed-96c9-dac502259ad0.png

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

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

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

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

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

b33ed136-45e5-11ed-96c9-dac502259ad0.png

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

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

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

b35201f2-45e5-11ed-96c9-dac502259ad0.png

如上圖所示:

(1)數(shù)據(jù)文件連續(xù)且緊密的存儲(chǔ)著; (2)并發(fā)insert無表鎖爭(zhēng)搶(只需插入隊(duì)列互斥); (3)insert只在數(shù)據(jù)文件的尾部進(jìn)行; (4)并發(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)致空洞。

b36e1144-45e5-11ed-96c9-dac502259ad0.png

如上圖所示:

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

b3861fe6-45e5-11ed-96c9-dac502259ad0.png

再如上圖所示:

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

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

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    6899

    瀏覽量

    88845
  • 存儲(chǔ)
    +關(guān)注

    關(guān)注

    13

    文章

    4265

    瀏覽量

    85680
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    802

    瀏覽量

    26448

原文標(biāo)題:頻繁插入,用什么存儲(chǔ)引擎更合適?| 數(shù)據(jù)庫系列

文章出處:【微信號(hào):良許Linux,微信公眾號(hào):良許Linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于MySQL機(jī)制

    在數(shù)據(jù)庫系統(tǒng)中,為了保證數(shù)據(jù)的一致和并發(fā)控制,機(jī)制發(fā)揮著至關(guān)重要的作用。尤其在關(guān)系型數(shù)據(jù)庫MySQL中,其獨(dú)特的機(jī)制設(shè)計(jì)更是贏得了許多
    的頭像 發(fā)表于 09-30 11:16 ?849次閱讀

    mysql中文參考手冊(cè)chm

    數(shù)據(jù)庫類型 10 從 MySQL 得到最大的性能 10.1 優(yōu)化概述 10.2 系統(tǒng)/編譯時(shí)和啟動(dòng)參數(shù)的調(diào)節(jié) 10.2.1 編譯和鏈接如何影響 MySQL 的速度 10.2.2 磁盤
    發(fā)表于 12-26 13:32

    MySQL分區(qū)類型及介紹

    分區(qū)是將一個(gè)的數(shù)據(jù)按照一定規(guī)則水平劃分成不同的邏輯塊,并分別進(jìn)行物理存儲(chǔ),這個(gè)規(guī)則就叫做分區(qū)函數(shù),可以有不同的分區(qū)規(guī)則。通過show plugins語句查看當(dāng)前MySQL是否支持
    發(fā)表于 06-29 16:31

    mysql的結(jié)構(gòu)修改、約束

    mysql結(jié)構(gòu)修改、約束(二)
    發(fā)表于 05-21 10:26

    鏡像對(duì)系統(tǒng)性能的影響有哪些?

    鏡像抑制基礎(chǔ)知識(shí)可減少AD9361和AD9371中正交不平衡的技術(shù)鏡像的來源、含義及對(duì)系統(tǒng)性能的影響
    發(fā)表于 03-29 07:59

    MySQL存儲(chǔ)引擎簡(jiǎn)析

    MySQL存儲(chǔ)引擎InnoDB??InnoDB 的存儲(chǔ)文件有兩個(gè),后綴名分別是.frm和.idb,其中.frm是的定義文件,而.idb是數(shù)據(jù)文件。InnoDB 中存在和行
    發(fā)表于 09-06 06:07

    嵌入式系統(tǒng)概述知識(shí)梳理

    《嵌入式系統(tǒng)》 |(一)嵌入式系統(tǒng)概述 知識(shí)梳理《嵌入式系統(tǒng)》 |(二)ARM Cortex M3 體系結(jié)構(gòu)
    發(fā)表于 12-22 06:53

    新手必看!FPGA的系統(tǒng)性學(xué)習(xí)

    本系列將帶來FPGA的系統(tǒng)性學(xué)習(xí),從最基本的數(shù)字電路基礎(chǔ)開始,最詳細(xì)操作步驟,最直白的言語描述,手把手的傻瓜式講解,讓電子、信息、通信類專業(yè)學(xué)生、初入職場(chǎng)小白及打算進(jìn)階提升的職業(yè)開發(fā)者都可以有系統(tǒng)性
    的頭像 發(fā)表于 09-28 11:52 ?2464次閱讀
    新手必看!FPGA的<b class='flag-5'>系統(tǒng)性</b>學(xué)習(xí)

    MySQL中的高級(jí)內(nèi)容詳解

    MySQL 進(jìn)階!!! 本文思維導(dǎo)圖如下。 事務(wù)控制和鎖定語句 我們知道,MyISAM 和 MEMORY 存儲(chǔ)引擎支持級(jí)鎖定(table-level locking),InnoDB 存儲(chǔ)引擎支持行級(jí)鎖定
    的頭像 發(fā)表于 03-11 16:55 ?2192次閱讀
    <b class='flag-5'>MySQL</b>中的高級(jí)內(nèi)容詳解

    MySQL是怎么加行級(jí)的?有什么規(guī)則?

    是不是很多人都對(duì) MySQL 加行級(jí)的規(guī)則搞的迷迷糊糊,對(duì)記錄一會(huì)加的是 next-key ,一會(huì)加是間隙,一會(huì)又是記錄
    的頭像 發(fā)表于 11-17 09:28 ?781次閱讀

    MySQL索引下推知識(shí)分享

    Mysql 是大家最常用的數(shù)據(jù)庫,下面為大家?guī)?mysql 索引下推知識(shí)點(diǎn)的分享,以便鞏固 mysql 基礎(chǔ)知識(shí),如有錯(cuò)誤,還請(qǐng)各位大佬們
    的頭像 發(fā)表于 12-27 09:49 ?632次閱讀

    一文徹底搞懂MySQL究竟的啥1

    MySQL系列文章已經(jīng)鴿了挺久了,最近趕緊擠了擠時(shí)間,和大家聊一聊MySQL。 只要學(xué)計(jì)算機(jī),「``」永遠(yuǎn)是一個(gè)繞不過的話題。
    的頭像 發(fā)表于 03-03 10:12 ?444次閱讀
    一文徹底搞懂<b class='flag-5'>MySQL</b><b class='flag-5'>鎖</b>究竟<b class='flag-5'>鎖</b>的啥1

    一文徹底搞懂MySQL究竟的啥2

    MySQL系列文章已經(jīng)鴿了挺久了,最近趕緊擠了擠時(shí)間,和大家聊一聊MySQL。 只要學(xué)計(jì)算機(jī),「``」永遠(yuǎn)是一個(gè)繞不過的話題。
    的頭像 發(fā)表于 03-03 10:13 ?421次閱讀
    一文徹底搞懂<b class='flag-5'>MySQL</b><b class='flag-5'>鎖</b>究竟<b class='flag-5'>鎖</b>的啥2

    LDO基礎(chǔ)知識(shí):噪聲-降噪引腳如何提高系統(tǒng)性

    LDO基礎(chǔ)知識(shí):噪聲-降噪引腳如何提高系統(tǒng)性
    的頭像 發(fā)表于 09-18 10:58 ?1211次閱讀
    LDO基礎(chǔ)<b class='flag-5'>知識(shí)</b>:噪聲-降噪引腳如何提高<b class='flag-5'>系統(tǒng)性</b>能

    MySQL數(shù)據(jù)庫基礎(chǔ)知識(shí)

    的基礎(chǔ)知識(shí),包括其架構(gòu)、數(shù)據(jù)類型、操作、查詢語句和數(shù)據(jù)導(dǎo)入導(dǎo)出等方面。 MySQL 數(shù)據(jù)庫架構(gòu) MySQL 數(shù)據(jù)庫由多個(gè)組件組成,包括服務(wù)器、存儲(chǔ)引擎和客戶端等。
    的頭像 發(fā)表于 11-21 11:09 ?949次閱讀