【原創】說說你是如何理解Oracle資料庫中latch和enqueue lock的?

leonarding發表於2012-12-07
 

答:這個問題每個人可能有每個人不同的想法,每個人的出發點可能也都不同,我的出發點先從來源找,是什麼原因產生了lock&latch。然後再從不同的角度去解釋lock&latch的本質。

Lock

1.來源於業務也消失於業務,基本上是由於業務流程安排的不合理產生的,是一種保護業務的鎖。

2.還來源於併發,俗話說沒有併發就沒有lock,當大量會話都要去爭強一個修改權時,我們需要的是一種有序的,排隊的方式來獲得訪問許可權。這就好比大家在坐公車的時候,排隊上車排隊下車,誰也不能夠擁擠。

3.獨佔資源,為什麼這麼說,家裡的鎖、銀行保險箱都是為了保護貴重物品而存在,oracle的鎖也一樣,當我在修改一條記錄的時候就相當於我自己獨佔了,別人要等我修改完畢後才能獲取,這就是鎖的特性。

4.保證讀一致性,什麼是讀一致性,簡單的通俗的說,同一時間大家看到的資料都是一樣的,這麼說大家好理解一些,實際要比這個複雜哦。這樣的好處大家能夠感受到對資料變化是統一的,避免了資料不對稱造成的誤解。舉個例子  當你看超女演唱會的時候需要先購票,你要和她一起看這時候就需要買2張票,當你在買票的過程中,售票員需要先把2張票鎖定(不管真買假買)否則在你拿鈔票的過程中別人給搶購了,此時女朋友就會把今天變成你的世界末日這樣不太好吧!保證看到的和實際的要一致,這就是一致性的來源。

5.維護事務完整性,這又從事務的角度來探討lock了,大家都知道關係型資料庫就是為事務而生的,只有在關係型資料庫中才有事務這個概念。什麼是事務的完整,就是沒有提交的事務對他人是不可見的,例如 我修改一條記錄,這條記錄是在資料塊中真真切切的修改了,但沒有提交,此時別人是不可見的,別人要想查詢只能從undo段中找記錄前快照來查詢。事物完整性是資料安全的守護神。

6.鎖的資訊是資料塊上的一個屬性是物理的,並不是邏輯上屬於某個表或某幾行的。


Latch

1.來源於系統資源的緊張不夠用所致。例如 SGA  CPU  sql解析  ,它是一種保護資源的鎖。

2.來源於資料庫設計,我指的是內部原理機制,是一種獨佔資源的機制,我一旦搶到資源後馬上從裡面閂住,用完之後再出來。這種系統資源是一直存在的,不管我們用不用它都是存在著的,有了latch機制我們可以更有效的管理和使用這些系統資源。

3.Latch是一種輕量級的鎖,為什麼說它也是鎖呢,因為它也有鎖的一些特性。例如獨佔資源 一致性等。Latch不會造成鎖一樣的阻塞,只會導致等待,這是2個完全不同的概念,阻塞是系統設計上的問題,等待是系統資源爭用的問題,這對我們判斷系統效能有很大的幫助。

4.latch也可以說是一種記憶體技術,用於保護資料庫記憶體結構,是系統層面的事情,跟業務無關,例如

share_pool 裡面latch爭用,大多數是由沒有繫結變數,低效sql,不規範sql引起的。解決方法:減少sql硬解析,最佳化sql語句,規範編碼規則。

data_buffer_cache 裡面latch爭用,是由大量會話同一時間訪問同一個資料塊引起的。我們也稱作熱塊現象。解決方法:把記錄打散到多個資料塊中,減少多個會話同一時間頻繁訪問一個資料塊機率,防止由於記錄都集中在一個資料塊裡產生熱塊現象。

5.OLTP系統中由於有大併發的產生,latch爭用現象非常多。

OLAP系統中由於很少有表頻繁修改,執行的sql語句又不多,因此latch也不多。




2012.12.06
天津&winter
分享技術~成就夢想

Blog

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

相關文章