亚洲精品中文免费|亚洲日韩中文字幕制服|久久精品亚洲免费|一本之道久久免费

      
      

            <dl id="hur0q"><div id="hur0q"></div></dl>

                2022年MySQL最新面試題 – MySQL數(shù)據(jù)庫(kù)讀寫鎖

                0、概要

                • 1、談一談MySQL的讀寫鎖
                • 2、隔離級(jí)別與鎖的關(guān)系
                • 3、按照鎖的粒度數(shù)據(jù)庫(kù)鎖有哪些?鎖機(jī)制與InnoDB鎖算法
                • 4、從鎖的類別上分MySQL都有哪些鎖呢?像上面那樣子進(jìn)行鎖定豈不是有點(diǎn)阻礙并發(fā)效率了
                • 5、MySQL中InnoDB引擎的行鎖是怎么實(shí)現(xiàn)的?
                • 6、InnoDB存儲(chǔ)引擎的鎖的算法有三種
                • 7、什么是死鎖?怎么解決?
                • 8、數(shù)據(jù)庫(kù)的樂(lè)觀鎖和悲觀鎖是什么?怎么實(shí)現(xiàn)的?

                #1、談一談MySQL的讀寫鎖

                出現(xiàn)概率:

                在處理并發(fā)讀或?qū)憰r(shí),可以通過(guò)實(shí)現(xiàn)一個(gè)由兩種類型組成的鎖系統(tǒng)來(lái)解決問(wèn)題。這兩種類型的鎖通常被稱為共享鎖和排它鎖,也叫讀鎖和寫鎖。讀鎖是共享的,相互不阻塞,多個(gè)客戶在同一時(shí)刻可以同時(shí)讀取同一個(gè)資源而不相互干擾。寫鎖則是排他的,也就是說(shuō)一個(gè)寫鎖會(huì)阻塞其他的寫鎖和讀鎖,確保在給定時(shí)間內(nèi)只有一個(gè)用戶能執(zhí)行寫入并防止其他用戶讀取正在寫入的同一資源。

                在實(shí)際的數(shù)據(jù)庫(kù)系統(tǒng)中,每時(shí)每刻都在發(fā)生鎖定,當(dāng)某個(gè)用戶在修改某一部分?jǐn)?shù)據(jù)時(shí),MySQL 會(huì)通過(guò)鎖定防止其他用戶讀取同一數(shù)據(jù)。寫鎖比讀鎖有更高的優(yōu)先級(jí),一個(gè)寫鎖請(qǐng)求可能會(huì)被插入到讀鎖隊(duì)列的前面,但是讀鎖不能插入到寫鎖前面。

                #2、隔離級(jí)別與鎖的關(guān)系

                出現(xiàn)概率:

                在Read Uncommitted級(jí)別下,讀取數(shù)據(jù)不需要加共享鎖,這樣就不會(huì)跟被修改的數(shù)據(jù)上的排他鎖沖突

                在Read Committed級(jí)別下,讀操作需要加共享鎖,但是在語(yǔ)句執(zhí)行完以后釋放共享鎖;

                在Repeatable Read級(jí)別下,讀操作需要加共享鎖,但是在事務(wù)提交之前并不釋放共享鎖,也就是必須等待事務(wù)執(zhí)行完畢以后才釋放共享鎖。

                SERIALIZABLE 是限制性最強(qiáng)的隔離級(jí)別,因?yàn)樵摷?jí)別鎖定整個(gè)范圍的鍵,并一直持有鎖,直到事務(wù)完成。

                #3、按照鎖的粒度分?jǐn)?shù)據(jù)庫(kù)鎖有哪些?鎖機(jī)制與InnoDB鎖算法

                出現(xiàn)概率:

                在關(guān)系型數(shù)據(jù)庫(kù)中,可以按照鎖的粒度把數(shù)據(jù)庫(kù)鎖分為行級(jí)鎖(INNODB引擎)、表級(jí)鎖(MYISAM引擎)和頁(yè)級(jí)鎖(BDB引擎 )。

                MyISAM和InnoDB存儲(chǔ)引擎使用的鎖:

                MyISAM采用表級(jí)鎖(table-level locking)。

                InnoDB支持行級(jí)鎖(row-level locking)和表級(jí)鎖,默認(rèn)為行級(jí)鎖

                行級(jí)鎖,表級(jí)鎖和頁(yè)級(jí)鎖對(duì)比

                行級(jí)鎖 行級(jí)鎖是Mysql中鎖定粒度最細(xì)的一種鎖,表示只針對(duì)當(dāng)前操作的行進(jìn)行加鎖。行級(jí)鎖能大大減少數(shù)據(jù)庫(kù)操作的沖突。其加鎖粒度最小,但加鎖的開銷也最大。行級(jí)鎖分為共享鎖 和 排他鎖。

                特點(diǎn):開銷大,加鎖慢;會(huì)出現(xiàn)死鎖;鎖定粒度最小,發(fā)生鎖沖突的概率最低,并發(fā)度也最高。

                表級(jí)鎖 表級(jí)鎖是MySQL中鎖定粒度最大的一種鎖,表示對(duì)當(dāng)前操作的整張表加鎖,它實(shí)現(xiàn)簡(jiǎn)單,資源消耗較少,被大部分MySQL引擎支持。最常使用的MYISAM與INNODB都支持表級(jí)鎖定。表級(jí)鎖定分為表共享讀鎖(共享鎖)與表獨(dú)占寫鎖(排他鎖)。

                特點(diǎn):開銷小,加鎖快;不會(huì)出現(xiàn)死鎖;鎖定粒度大,發(fā)出鎖沖突的概率最高,并發(fā)度最低。

                頁(yè)級(jí)鎖 頁(yè)級(jí)鎖是MySQL中鎖定粒度介于行級(jí)鎖和表級(jí)鎖中間的一種鎖。表級(jí)鎖速度快,但沖突多,行級(jí)沖突少,但速度慢。所以取了折衷的頁(yè)級(jí),一次鎖定相鄰的一組記錄。

                特點(diǎn):開銷和加鎖時(shí)間界于表鎖和行鎖之間;會(huì)出現(xiàn)死鎖;鎖定粒度界于表鎖和行鎖之間,并發(fā)度一般

                回復(fù): mysql免費(fèi)獲取最新Mysql面試題匯總(含答案)。

                #4、從鎖的類別上分MySQL都有哪些鎖呢?像上面那樣子進(jìn)行鎖定豈不是有點(diǎn)阻礙并發(fā)效率了

                出現(xiàn)概率:

                從鎖的類別上來(lái)講,有共享鎖和排他鎖。

                共享鎖: 又叫做讀鎖。當(dāng)用戶要進(jìn)行數(shù)據(jù)的讀取時(shí),對(duì)數(shù)據(jù)加上共享鎖。共享鎖可以同時(shí)加上多個(gè)。

                排他鎖: 又叫做寫鎖。當(dāng)用戶要進(jìn)行數(shù)據(jù)的寫入時(shí),對(duì)數(shù)據(jù)加上排他鎖。排他鎖只可以加一個(gè),他和其他的排他鎖,共享鎖都相斥。

                用上面的例子來(lái)說(shuō)就是用戶的行為有兩種,一種是來(lái)看房,多個(gè)用戶一起看房是可以接受的。一種是真正的入住一晚,在這期間,無(wú)論是想入住的還是想看房的都不可以。

                鎖的粒度取決于具體的存儲(chǔ)引擎,InnoDB實(shí)現(xiàn)了行級(jí)鎖,頁(yè)級(jí)鎖,表級(jí)鎖。

                他們的加鎖開銷從大到小,并發(fā)能力也是從大到小。

                #5、MySQL中InnoDB引擎的行鎖是怎么實(shí)現(xiàn)的?

                出現(xiàn)概率:

                答:InnoDB是基于索引來(lái)完成行鎖

                select * from tab_with_index where id = 1 for update;

                for update 可以根據(jù)條件來(lái)完成行鎖鎖定,并且 id 是有索引鍵的列,如果 id 不是索引鍵那么InnoDB將完成表鎖,并發(fā)將無(wú)從談起

                #6、InnoDB存儲(chǔ)引擎的鎖的算法有三種

                • Record lock:?jiǎn)蝹€(gè)行記錄上的鎖
                • Gap lock:間隙鎖,鎖定一個(gè)范圍,不包括記錄本身
                • Next-key lock:record+gap 鎖定一個(gè)范圍,包含記錄本身

                #7、什么是死鎖?

                出現(xiàn)概率:

                死鎖是指兩個(gè)或多個(gè)事務(wù)在同一資源上相互占用,并請(qǐng)求鎖定對(duì)方的資源,從而導(dǎo)致惡性循環(huán)的現(xiàn)象。

                回復(fù): mysql免費(fèi)獲取最新Mysql面試題匯總(含答案)。

                #8、常見的解決死鎖的方法

                出現(xiàn)概率:

                死鎖是指多個(gè)事務(wù)在同一資源上相互占用并請(qǐng)求鎖定對(duì)方占用的資源而導(dǎo)致惡性循環(huán)的現(xiàn)象。當(dāng)多個(gè)事務(wù)試圖以不同順序鎖定資源時(shí)就可能會(huì)產(chǎn)生死鎖,多個(gè)事務(wù)同時(shí)鎖定同一個(gè)資源時(shí)也會(huì)產(chǎn)生死鎖。

                為了解決死鎖問(wèn)題,數(shù)據(jù)庫(kù)系統(tǒng)實(shí)現(xiàn)了各種死鎖檢測(cè)和死鎖超時(shí)機(jī)制。越復(fù)雜的系統(tǒng),例如InnoDB 存儲(chǔ)引擎,越能檢測(cè)到死鎖的循環(huán)依賴,并立即返回一個(gè)錯(cuò)誤。這種解決方式很有效,否則死鎖會(huì)導(dǎo)致出現(xiàn)非常慢的查詢。還有一種解決方法,就是當(dāng)查詢的時(shí)間達(dá)到鎖等待超時(shí)的設(shè)定后放棄鎖請(qǐng)求,這種方式通常來(lái)說(shuō)不太好。InnoDB 目前處理死鎖的方法是將持有最少行級(jí)排它鎖的事務(wù)進(jìn)行回滾。

                死鎖發(fā)生之后,只有部分或者完全回滾其中一個(gè)事務(wù),才能打破死鎖。對(duì)于事務(wù)型系統(tǒng)這是無(wú)法避免的,所以應(yīng)用程序在設(shè)計(jì)時(shí)必須考慮如何處理死鎖。大多數(shù)情況下只需要重新執(zhí)行因死鎖回滾的事務(wù)即可。

                #9、數(shù)據(jù)庫(kù)的樂(lè)觀鎖和悲觀鎖是什么?怎么實(shí)現(xiàn)的?

                出現(xiàn)概率:

                數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)中的并發(fā)控制的任務(wù)是確保在多個(gè)事務(wù)同時(shí)存取數(shù)據(jù)庫(kù)中同一數(shù)據(jù)時(shí)不破壞事務(wù)的隔離性和統(tǒng)一性以及數(shù)據(jù)庫(kù)的統(tǒng)一性。樂(lè)觀并發(fā)控制(樂(lè)觀鎖)和悲觀并發(fā)控制(悲觀鎖)是并發(fā)控制主要采用的技術(shù)手段。

                悲觀鎖:假定會(huì)發(fā)生并發(fā)沖突,屏蔽一切可能違反數(shù)據(jù)完整性的操作。在查詢完數(shù)據(jù)的時(shí)候就把事務(wù)鎖起來(lái),直到提交事務(wù)。實(shí)現(xiàn)方式:使用數(shù)據(jù)庫(kù)中的鎖機(jī)制

                樂(lè)觀鎖:假設(shè)不會(huì)發(fā)生并發(fā)沖突,只在提交操作時(shí)檢查是否違反數(shù)據(jù)完整性。在修改數(shù)據(jù)的時(shí)候把事務(wù)鎖起來(lái),通過(guò)version的方式來(lái)進(jìn)行鎖定。實(shí)現(xiàn)方式:樂(lè)一般會(huì)使用版本號(hào)機(jī)制或CAS算法實(shí)現(xiàn)。

                兩種鎖的使用場(chǎng)景

                從上面對(duì)兩種鎖的介紹,我們知道兩種鎖各有優(yōu)缺點(diǎn),不可認(rèn)為一種好于另一種,像樂(lè)觀鎖適用于寫比較少的情況下(多讀場(chǎng)景),即沖突真的很少發(fā)生的時(shí)候,這樣可以省去了鎖的開銷,加大了系統(tǒng)的整個(gè)吞吐量。

                但如果是多寫的情況,一般會(huì)經(jīng)常產(chǎn)生沖突,這就會(huì)導(dǎo)致上層應(yīng)用會(huì)不斷的進(jìn)行retry,這樣反倒是降低了性能,所以一般多寫的場(chǎng)景下用悲觀鎖就比較合適。

                鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場(chǎng),版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系管理員(admin#wlmqw.com)刪除。
                用戶投稿
                上一篇 2022年6月14日 18:12
                下一篇 2022年6月14日 18:13

                相關(guān)推薦

                • 推薦48個(gè)微商引流推廣的方法(微商引流推廣的方法有哪些)

                  微商引流技能01——同行互推 資源共享,大家才會(huì)共贏。加入你是做穴位貼的,你的朋友是做化妝品的,這是兩個(gè)沒(méi)有交集的行業(yè),你們可以友情互推,這樣每個(gè)月的資源就都擴(kuò)大了一倍,而且這些資…

                  2022年11月27日
                • 部落沖突5本陣型(部落沖突5本陣型鏈接復(fù)制2023)

                  本文主要講的是部落沖突5本陣型,以及和部落沖突5本陣型鏈接復(fù)制2021相關(guān)的知識(shí),如果覺(jué)得本文對(duì)您有所幫助,不要忘了將本文分享給朋友。 《部落沖突》五本陣型是什么? 《部落沖突》五…

                  2022年11月27日
                • 什么是推廣cpa一篇文章帶你看懂CPA推廣渠道

                  CPA渠道 CPA指的是按照指定的行為結(jié)算,可以是搜索,可以是注冊(cè),可以是激活,可以是搜索下載激活,可以是綁卡,實(shí)名認(rèn)證,可以是付費(fèi),可以是瀏覽等等。甲乙雙方可以根據(jù)自己的情況來(lái)定…

                  2022年11月25日
                • 抖音直播帶貨有哪些方法技巧(抖音直播帶貨有哪些痛點(diǎn))

                  如今抖音這個(gè)短視頻的變現(xiàn)能力越來(lái)越突顯了,尤其是在平臺(tái)上開通直播,更具有超強(qiáng)的帶貨屬性,已經(jīng)有越來(lái)越多的普通人加入到其中了。不過(guò)直播帶貨雖然很火,但是也不是每個(gè)人都能做好的,那么在…

                  2022年11月24日
                • 明查|美國(guó)新冠后遺癥患者中有16%癥狀嚴(yán)重以致無(wú)法工作?

                  點(diǎn)擊進(jìn)入澎湃新聞全球事實(shí)核查平臺(tái) 速覽 – 網(wǎng)傳數(shù)據(jù)比例無(wú)權(quán)威信源佐證,該比例有可能是結(jié)合了美國(guó)疾病防控中心和布魯金斯學(xué)會(huì)的數(shù)據(jù)得出,但這兩個(gè)機(jī)構(gòu)的調(diào)研目的和樣本都不同…

                  2022年11月24日
                • 《寶可夢(mèng)朱紫》閃光炭小侍怎么刷?閃光炭小侍刷取方法

                  寶可夢(mèng)朱紫中刷閃光寶可夢(mèng)也是游戲的玩法之一,其中有玩家想知道寶可夢(mèng)朱紫閃光炭小侍怎么刷,下面就帶來(lái)寶可夢(mèng)朱紫閃光炭小侍刷取方法,感興趣的小伙伴不要錯(cuò)過(guò),希望能幫助到大家。 閃光炭小…

                  2022年11月23日
                • 寶可夢(mèng)朱紫刷閃概率怎么提升 寶可夢(mèng)朱紫刷閃概率提升技巧分享

                  寶可夢(mèng)朱紫刷閃概率是能提升的,但是玩家對(duì)于提升刷閃概率的方法并不了解,今天小編就在下面的攻略中給大家分享一下刷閃概率的技巧,有興趣了解的玩家都可以來(lái)小編這里看一看刷閃概率的提升方法…

                  2022年11月23日
                • 我叫MT歸來(lái)墓園有什么用 我叫MT歸來(lái)墓園什么時(shí)候開啟?

                  多小伙伴是不是都不知道我叫MT歸來(lái)墓園有什么用?全明星激斗作為一款3D卡牌手游,受到了很多小伙伴的關(guān)注,我叫MT歸來(lái)墓園攻略小伙伴們知道了嗎?下面就和小編一起來(lái)了解一下吧。 我叫M…

                  2022年11月22日
                • 《寶可夢(mèng)朱紫》怎么刷經(jīng)驗(yàn) 刷經(jīng)驗(yàn)方法技巧

                  寶可夢(mèng)朱紫玩家在游戲過(guò)程中除了捕捉各種寶可夢(mèng)外,還可以順便刷一下經(jīng)驗(yàn)或是錢,那么怎么刷經(jīng)驗(yàn)?zāi)?,小編這里給大家?guī)?lái)了寶可夢(mèng)朱紫刷經(jīng)驗(yàn)方法技巧,一起來(lái)看下文中具體介紹吧。 就是妖精系天…

                  2022年11月21日
                • 《寶可夢(mèng)朱紫》閃光碳小侍怎么刷?刷閃光碳小侍技巧

                  前面為大家分享過(guò)關(guān)于寶可夢(mèng)朱紫的刷閃機(jī)制了,大家看過(guò)的話會(huì)有一定的了解,那么怎么刷閃光碳小侍呢,這里給大家?guī)?lái)了寶可夢(mèng)朱紫刷閃光碳小侍技巧,一起來(lái)看下文中具體介紹吧。 刷閃光碳小侍…

                  2022年11月21日

                聯(lián)系我們

                聯(lián)系郵箱:admin#wlmqw.com
                工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息