3.讓ORACLE 跑的更快_latch和等待
阿新 • • 發佈:2018-12-31
經常有人把LATCH 造成的等待事件誤認為是LOCK造成的阻塞,其實是兩個完全不同的概念。要區別開這兩個因素,是效能分析人員必備的判斷能力。
Latch是為了保護記憶體結構而發明出的一種資源,按照保護的資源型別不同,可以把Latch分成很多種。
Latch 不會造成阻塞,只會等待。阻塞是系統設計上的問題,等待是一種系統資源爭用的問題。
導致LATCH爭用的等待的原因非常多,記憶體中很多資源都可能存在著爭用。Latch爭用,都會導致資料庫的效能下降。
- 共享池的Latch爭用
如果大量的SQL被反覆分析,會造成很大的Latch爭用和長時間的等待,最常見的是沒有繫結變數導致。
- 資料緩衝池Latch爭用
訪問頻率非常搞的資料塊被稱為熱塊,當很多使用者一起去訪問某幾個資料塊時候,就會導致一些Latch爭用。
- Buffer busy waits
- Cache buffer chain
熱塊產生的原因不盡相同,可以分為
- 表資料塊
- 索引資料塊
- 索引根資料塊
- 檔案頭資料塊
-
- 表資料塊
如果表不大,可以考慮將表資料分佈在更多的資料塊上,減少資料塊被多數會話同時訪問的頻率。
-
- 索引資料塊
通常發生在RAC架構裡,某個表的索引鍵值呈現出典型的右傾現象,比如一個表的主鍵使用一個序列來生成鍵值,那麼這個主鍵在索引資料塊上的鍵值就是以一個順序激增的方式排列的。
-
- 索引根資料塊
熱塊也可能發生在索引的根資料塊上,在B-TREE索引裡,當ORACLE訪問一個索引鍵值時,首選訪問索引的根,然後是索引的分支,最後才是索引的葉塊,索引的鍵值就是儲存在葉塊上面。
-
- 段頭資料塊
在OLTP系統資料庫中,一些資料段的Free List 可能會是一個訪問很頻繁的資料塊。