答:這個問題每個人可能有每個人不同的想法,每個人的出發點可能也都不同,我的出發點先從來源找,是什麼原因產生了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也不多。
Leonarding
2012.12.06
天津&winter
分享技術~成就夢想
Blog:www.leonarding.com
本文出自 “leonarding Blog” 部落格,請務必保留此出處http://leonarding.blog.51cto.com/6045525/1081170