讓ORACLE跑的更快之 latch和等待

2021-12-30 08:48:10 字數 841 閱讀 4098

經常有人把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 可能會是乙個訪問很頻繁的資料塊。

讓ORACLE 跑的更快 鎖和阻塞

鎖和阻塞 關於併發concurrency,和並行 parrallel 的意思是不一樣的。資料庫中併發的意思是有超過兩個以上的使用者對同樣的資料做修改,而並行的意思是說將一件事情分成很多小的部分,讓每一部分同時執行,最後將執行結果彙總成最終結果。沒有併發就沒有鎖,鎖的產生是因為併發,併發的產生是因為系...

4 讓ORACLE 跑的更快 優化器

優化器optimizer 是sql分析和執行的優化工具,負責制訂sql執行計畫,保證sql執行的效率最高。優化器決定oracle以什麼樣的方式訪問資料,是全表掃瞄,索引範圍掃瞄 index range scan 還是 全索引快速掃瞄 index fast full scan index ffs 對於...

縮短頁面的渲染時間 讓頁面跑的更快些

一,寫出高效的css 首先弄清瀏覽器解析html 的過程 構建乙個dom樹,頁面要顯示的各元素都會建立到這個dom樹當中。每當乙個新元素加入到這個dom樹當中,瀏覽器便會通過css引擎查遍css樣式表,找到符合該元素的樣式規則應用到這個元素上。css引擎查詢樣式表,對每條規則都按從右到左的順序去匹配...