【原創】說說你是如何理解Oracle資料庫中latch和enqueue lock的?
答:這個問題每個人可能有每個人不同的想法,每個人的出發點可能也都不同,我的出發點先從來源找,是什麼原因產生了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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 你能說說你理解的資料庫規範嗎?資料庫
- Oracle中latch和lock的區別Oracle
- Oracle Latch 說明Oracle
- mutex,latch,lock,enqueue hash chains latch基礎概念MutexENQAI
- enqueue, latch的理解及區別ENQ
- 如何在Oracle資料庫中查詢表和欄位說明Oracle資料庫
- oracle enqueue lockOracleENQ
- 你說說對Java中SPI的理解吧Java
- 說說你對this的理解
- 說說你對資料結構的理解?有哪些?區別?資料結構
- 說說你對IE特有的資料儲存userData的理解
- Oracle Latch & LockOracle
- 你知道TCP和UTP的區別是什麼嗎?說說你對它們的理解TCP
- 說說你對keep-alive的理解是什麼?Keep-Alive
- 說說你對單例模式的理解?如何實現?單例模式
- 說說你對績效的理解?
- 你瞭解什麼是微前端嗎?說說你對它的理解前端
- 說說資料分析中的資料建模
- 你知道什麼是人工智慧和機器學習嗎?說說你對它們的理解認知人工智慧機器學習
- 說說你對盒子模型的理解?模型
- 說說你對z-index的理解Index
- 說說你對`<meta>`標籤的理解
- 說說你對作用域鏈的理解
- 說說你對前端架構的理解前端架構
- ORACLE LOCK,LATCH,PINOracle
- 說說資料庫事務資料庫
- W3C是什麼?請說說你對它的理解
- 說說你對堆的理解?如何實現?應用場景?
- 你有聽說過“分詞”嗎?說說你對它的理解分詞
- 說說在 Python 中,如何讀取檔案中的資料Python
- 從淘汰Oracle資料庫的事情說起Oracle資料庫
- 深入理解Oracle中的latchOracle
- 說說資料庫排行榜的事情資料庫
- 說說框架的資料庫遷移功能框架資料庫
- 如何實現應用快取?說說你對manifest的理解快取
- 【原創】用示例說明索引資料塊中出現熱塊&Latch的場景,並給出解決方案索引
- [原創] Oracle資料庫資源管理Oracle資料庫
- 【原創】手工建立Oracle資料庫Oracle資料庫