摘要:悲觀鎖數(shù)據(jù)庫的鎖通常都是頁級(jí)鎖,就是對(duì)同一張表里的數(shù)據(jù)采用串行化的更新插入機(jī)制,在任何時(shí)間同一張表只能插入一條數(shù)據(jù),別的想插入的數(shù)據(jù)必須要等這條數(shù)據(jù)插完之后才能依次插入。
悲觀鎖
數(shù)據(jù)庫的鎖通常都是頁級(jí)鎖,就是對(duì)同一張表里的數(shù)據(jù)采用串行化的更新插入機(jī)制,在任何時(shí)間同一張表只能插入一條數(shù)據(jù),別的想插入的數(shù)據(jù)必須要等這條數(shù)據(jù)插完之后才能依次插入。結(jié)果是性能降低,頻繁操作的時(shí)候,會(huì)假死,Oracle 是行級(jí)鎖,oracle 悲觀鎖,分為:for update 和 for update nowait
樂觀鎖
一開始假設(shè)不會(huì)造成沖突,提交的時(shí)候再進(jìn)行數(shù)據(jù)沖突檢測。
數(shù)據(jù)取得時(shí)候,把整個(gè)數(shù)據(jù)都copy到應(yīng)用中,提交的時(shí)候比對(duì)當(dāng)前數(shù)據(jù)庫中的數(shù)據(jù)和開始的時(shí)候取得的數(shù)據(jù),如果兩個(gè)數(shù)據(jù)一模一樣,就表示沒有沖突可以提交,否則是并發(fā)沖突,則需要業(yè)務(wù)邏輯解決
版本戳,在樂觀鎖的數(shù)據(jù)庫table上建立一個(gè)新的column,類型為number,數(shù)據(jù)每次更新一次的時(shí)候,版本數(shù)就會(huì)加1.如果有2個(gè)session同樣的對(duì)某條數(shù)據(jù)進(jìn)行操作,兩者都取得的版本號(hào)為1,當(dāng)?shù)谝粋€(gè)session進(jìn)行數(shù)據(jù)更新后,在提交的時(shí)候查看到當(dāng)前的數(shù)據(jù)庫版本還是為1,和一開始取得的版本相同,則提交,第二個(gè)session也更新了數(shù)據(jù)提交,發(fā)現(xiàn)數(shù)據(jù)庫版本為2,和一開始取得的版本號(hào)為1不一致,則知道別人已經(jīng)更新過此條記錄,這個(gè)時(shí)候再進(jìn)行業(yè)務(wù)處理,比如整個(gè)transaction都rollback,在驗(yàn)證版本戳的時(shí)候,可以用應(yīng)用程序或者trigger(開銷比較大)
和2類似,只不過是比較時(shí)間戳
死鎖
事務(wù)A取得數(shù)據(jù)列1的共享鎖定
事務(wù)B取得數(shù)據(jù)列2的共享鎖定
事務(wù)A現(xiàn)在要求數(shù)據(jù)列2的獨(dú)占鎖定,但會(huì)被阻塞到事務(wù)B完成并且釋放出數(shù)據(jù)列2的共享鎖定為止
事務(wù)B現(xiàn)在要求數(shù)據(jù)列1的獨(dú)占鎖定,單會(huì)被阻塞到事務(wù)A完成并且釋放出數(shù)據(jù)列1的共享鎖定為止
等到事務(wù)B完成后,事務(wù)A才能完成,但是事務(wù)B又被事務(wù)A封閉了,這種情況叫循環(huán)相依性,事務(wù)A相依于事務(wù)B,并且事務(wù)B相依于事務(wù)B,從而封閉了這個(gè)循環(huán)
InnoDB解決死鎖的方式是讓最少X鎖的事務(wù)回滾。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/17523.html
摘要:因?yàn)槎嗑€程競爭鎖時(shí)會(huì)引起上下文切換。減少線程的使用。舉個(gè)例子如果說服務(wù)器的帶寬只有,某個(gè)資源的下載速度是,系統(tǒng)啟動(dòng)個(gè)線程下載該資源并不會(huì)導(dǎo)致下載速度編程,所以在并發(fā)編程時(shí),需要考慮這些資源的限制。 最近私下做一項(xiàng)目,一bug幾日未解決,總惶恐。一日頓悟,bug不可怕,怕的是項(xiàng)目不存在bug,與其懼怕,何不與其剛正面。 系列文章傳送門: Java多線程學(xué)習(xí)(一)Java多線程入門 Jav...
摘要:以下為大家整理了阿里巴巴史上最全的面試題,涉及大量面試知識(shí)點(diǎn)和相關(guān)試題。的內(nèi)存結(jié)構(gòu),和比例。多線程多線程的幾種實(shí)現(xiàn)方式,什么是線程安全。點(diǎn)擊這里有一套答案版的多線程試題。線上系統(tǒng)突然變得異常緩慢,你如何查找問題。 以下為大家整理了阿里巴巴史上最全的 Java 面試題,涉及大量 Java 面試知識(shí)點(diǎn)和相關(guān)試題。 JAVA基礎(chǔ) JAVA中的幾種基本數(shù)據(jù)類型是什么,各自占用多少字節(jié)。 S...
摘要:相比與其他操作系統(tǒng)包括其他類系統(tǒng)有很多的優(yōu)點(diǎn),其中有一項(xiàng)就是,其上下文切換和模式切換的時(shí)間消耗非常少。因?yàn)槎嗑€程競爭鎖時(shí)會(huì)引起上下文切換。減少線程的使用。很多編程語言中都有協(xié)程。所以如何避免死鎖的產(chǎn)生,在我們使用并發(fā)編程時(shí)至關(guān)重要。 系列文章傳送門: Java多線程學(xué)習(xí)(一)Java多線程入門 Java多線程學(xué)習(xí)(二)synchronized關(guān)鍵字(1) java多線程學(xué)習(xí)(二)syn...
摘要:用戶態(tài)不能干擾內(nèi)核態(tài)所以指令就有兩種特權(quán)指令和非特權(quán)指令不同的狀態(tài)對(duì)應(yīng)不同的指令。非特權(quán)指令所有程序均可直接使用。用戶態(tài)常態(tài)目態(tài)執(zhí)行非特權(quán)指令。 這是我今年從三月份開始,主要的大廠面試經(jīng)過,有些企業(yè)面試的還沒來得及整理,可能有些沒有帶答案就發(fā)出來了,還請(qǐng)各位先思考如果是你怎么回答面試官?這篇文章會(huì)持續(xù)更新,請(qǐng)各位持續(xù)關(guān)注,希望對(duì)你有所幫助! 面試清單 平安產(chǎn)險(xiǎn) 飛豬 上汽大通 浩鯨科...
閱讀 711·2021-11-16 11:44
閱讀 3541·2019-08-26 12:13
閱讀 3236·2019-08-26 10:46
閱讀 2352·2019-08-23 12:37
閱讀 1180·2019-08-22 18:30
閱讀 2526·2019-08-22 17:30
閱讀 1835·2019-08-22 17:26
閱讀 2284·2019-08-22 16:20