Latch 與 Lock 的區別

tolywang發表於2011-06-08

原文:oracle wait interface—a practical guide to performance diagnostics & tuning 

 

 

Latch

Lock

目的

只有一個目的:保證對記憶體結構的排他性訪問(從oracle9i開始,cache buffers chain latch可以允許只讀共享訪問)

兩個目的:如果鎖模式是相容的,允許多個程式共享相同的資源;如果鎖模型是不相容的,保證對共享資源的排它性訪問。

適用場景

只能應用於sga中的資料結構,保護記憶體物件。Latch隻影響單次操作,而和事務無關。

保護資料庫物件,諸如表,資料塊和狀態物件等。由應用程式驅動,控制對資料庫中資料和後設資料的訪問。

Lock是事務性的。

獲取方式

兩種模式:willing-to-waitno-wait

六種模式:null, row share, row exclusive, share, share row exclusiveexclusive

範圍

資訊都儲存在記憶體中,並且只在本例項可見――latch是例項級別的

 資訊儲存在資料庫中,並且該資料庫的所有例項都可見――lock是資料庫級的

複雜度

使用簡單機器指令比如:test-and-set, compare-and-swap或其他簡單的cpu指令實現。由於cpu指令平臺相關,所以latch在不同的平臺的具體實現不一樣。

輕量級的。

需要上下文切換(context switch),使用一系列指令實現。

重量級的。

持續事件

非常短暫(通常是微秒級的)

通常在整個事務中都持有。

排隊機制

當一個程式獲取latch失敗,轉入睡眠狀態時,他的請求不需要按順序排隊(一個例外情況:latch wait list latch需要排隊)。

當一個程式獲取lock失敗,它的請求會進入一個佇列,除非指定nowait

死鎖

Latch的實現方式不會產生死鎖(不排隊)

Lock的排隊機制可能導致死鎖。死鎖發生時會產生相應的跟蹤檔案。

 

http://www.itpub.net/viewthread.php?tid=531500&highlight=latch%2Bfree

 

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-697353/,如需轉載,請註明出處,否則將追究法律責任。

相關文章