首先談?wù)勊鼈兊墓餐c(diǎn)吧:它們本質(zhì)上都是一種對(duì)資源的獨(dú)占鎖定,都是由并發(fā)引起(如果數(shù)據(jù)庫(kù)只有一個(gè)session,就談不上鎖定)。
接著著重談?wù)勊鼈兊牟煌c(diǎn):
首先,它們的目的不一樣,enqueue (即Lock,Oracle官方文檔混合使用這兩個(gè)名詞,在等待事件里,可以看到大量的enqueue,其實(shí)就是lock)是為了解決業(yè)務(wù)層面的數(shù)據(jù)爭(zhēng)用,而latch是為了解決內(nèi)存資源的爭(zhēng)用。
其次,它們的運(yùn)行方式不一樣,enqueue采用排隊(duì)方式,先到先得,而latch的競(jìng)爭(zhēng)近乎無(wú)序,以一種隨機(jī)的方式,先到不一定先得,得靠搶,而且它還以一種時(shí)間片輪訓(xùn)的方式,不會(huì)一直霸占,即時(shí)還沒(méi)運(yùn)行完,時(shí)間片一到也。
第三,會(huì)話持有的時(shí)長(zhǎng)不一樣,enqueue根據(jù)業(yè)務(wù)情況,可能會(huì)持有較長(zhǎng)時(shí)間,而latch通常非常短。第四,引起的原因不一樣,enqueue太多通常是業(yè)務(wù)設(shè)計(jì)的問(wèn)題,而latch過(guò)多,一般是數(shù)據(jù)庫(kù)層面的問(wèn)題(如未使用綁定變量、表或索引熱塊等)。