數(shù)據(jù)庫(kù)共享鎖和排他鎖 oracle行級(jí)鎖和表級(jí)鎖的區(qū)別?
oracle行級(jí)鎖和表級(jí)鎖的區(qū)別?如果SQL事務(wù)代碼中嵌入了接口調(diào)用或文件操作等非數(shù)據(jù)庫(kù)交互操作,則整個(gè)事務(wù)可能會(huì)被掛起(接口不工作,等待超時(shí)或上傳下載大型附件)。事務(wù)中存在慢速查詢,導(dǎo)致同一事務(wù)中的
oracle行級(jí)鎖和表級(jí)鎖的區(qū)別?
如果SQL事務(wù)代碼中嵌入了接口調(diào)用或文件操作等非數(shù)據(jù)庫(kù)交互操作,則整個(gè)事務(wù)可能會(huì)被掛起(接口不工作,等待超時(shí)或上傳下載大型附件)。
事務(wù)中存在慢速查詢,導(dǎo)致同一事務(wù)中的其他DML無(wú)法及時(shí)釋放占用的行鎖,導(dǎo)致行鎖等待。
這通常是由于在事務(wù)代碼中添加for循環(huán)引起的。雖然單個(gè)SQL運(yùn)行得很快,但是當(dāng)SQL的數(shù)量很大時(shí),事務(wù)將非常慢。
這種SQL很容易讓人產(chǎn)生錯(cuò)覺(jué)。例如,級(jí)聯(lián)更新,例如更新集。。。哪里。。。In(select b)不僅占用表a上的行鎖,還占用表b上的行鎖,當(dāng)SQL長(zhǎng)時(shí)間執(zhí)行時(shí),很容易導(dǎo)致表b上的行鎖等待。
在極少數(shù)情況下,例如存儲(chǔ)突然脫機(jī)時(shí),SQL執(zhí)行會(huì)卡在內(nèi)核調(diào)用磁盤(pán)的步驟中,一直等待,事務(wù)無(wú)法提交。
綜上所述,如果事務(wù)長(zhǎng)時(shí)間未提交,并且事務(wù)中包含DML操作,則可能會(huì)發(fā)生行鎖定等待,從而導(dǎo)致錯(cuò)誤。
java synchronized鎖對(duì)象,當(dāng)對(duì)象引用是null的時(shí)候,鎖的是什么?
謝謝
!Java語(yǔ)言規(guī)范明確指出,如果鎖定的對(duì)象為null,則會(huì)發(fā)生NullPointerException。規(guī)范的內(nèi)容如下:
表達(dá)式的類(lèi)型必須是引用類(lèi)型,否則會(huì)發(fā)生完全時(shí)間錯(cuò)誤。首先計(jì)算表達(dá)式,執(zhí)行同步語(yǔ)句。然后:如果表達(dá)式的求值由于某種原因完全完成,那么synchronized語(yǔ)句也會(huì)因?yàn)橥瑯拥脑蛲蝗煌瓿?。否則,如果表達(dá)式的值為null,則拋出NullPointerException。