天天看點

latch介紹

latch是一種鎖,用來實作對Oracle所有共享資料結構的串行化通路。共享池就是這樣一個例子,

這是系統全局區中一個龐大的共享資料結構,Oracle正是在這裡存儲已解析,已編譯的SQL。

修改這個共享記憶體結構時,必須注意一次隻允許一個程序通路。

(如果兩個程序或線程試圖同時更新記憶體中的相同的資料結構,這會很槽糕,會導緻大量資料被破壞.)

是以,Oracle采用了一種lacth機制,這是一種完成串行化通路的輕量級鎖定方法。

不要被"輕量級"這個詞蒙住了,作為串行化裝置,latch一次隻允許通路一個程序。latch在硬解析實作中大量使用,

實際上,這也是latch最常見的方法。共享池的latch和庫緩存的latch都是不折不扣的latch,它們成為

人們頻繁争搶的目标。這說明,試圖同時硬解析語句的使用者越多,性能就會随時間變得越差。

人們執行的硬解析越多,對共享池的latch争用就越厲害,等待的隊列越長,等待的時間也就越久。

硬解析更重要的因素是庫緩存所用的latch機制,硬解析一個查詢時,資料庫會更長時間地

占用一種低級的串行化裝置,稱為latch.

這種latch用來保護Oracle共享記憶體中的資料結構不會同時被兩個程序修改,而且如果有人正在修改資料結構,

則不允許另外的人再來讀取。對這些資料結構加latch的時間越長,越頻繁,排隊等待latch的程序就越多,

等待隊列也越長。

繼續閱讀