Latch的使用詳解

Latch的使用詳解

     Latch是Oracle爲了保護內存結構而發明的一種資源。常應用於併發的用戶從磁盤中讀取或寫入數據。最常見的latch爭用有:共享池中latch的爭用和數據緩衝池中latch的爭用。

1、共享池中latch的爭用:

共享池中如果存在大量的SQL語句被反覆分析,就很可能造成latch爭用和長時間等待,常見的現象是由於沒有綁定變量造成的。

SQL> select * from v$latchname where name like 'library cache%'

在分析系統性能時,如果有library cache這樣的latch爭用,基本可以斷定是共享池中出現的問題,這種問題是由SQL語句導致的,比如沒有綁定變量或者一些存儲過程被反覆分析。

 

2、數據緩衝池中latch的爭用:
當很多用戶一起去訪問某幾個數據塊時,就會導致數據緩衝池的latch爭用,主要有兩種:buffer busy  waits 和 cache buffer chain。訪問頻率高的數據塊被稱爲熱塊(hot block),當很多用戶同時訪問相同的數據塊就會導致熱塊問題,造成熱塊的原因可能是數據庫設置導致或者重複執行的SQL頻繁的訪問一些相同的數據塊導致的。

2.1查詢當前數據庫最繁忙的Buffer:TCHTouch)表示訪問次數越高,熱點塊競爭問題就存在
  select *
  from select addr,
  ts#,
  file#,
  dbarfil,
  dbablk,
  tch
  from x$bh
  order by tch desc
  where rownum<11;
2.2結合dba_extents查詢得到這些熱點Buffer來自哪些對象
  select e.owner, e.segment_name, e.segment_type
  from dba_extents e,
  (select *
  from select addr, ts#, file#, dbarfil, dbablk, tch
  from x$bh
  order by tch desc
  where rownum<11 b
  where e.relative_fno=b.dbarfil
  and e.block_id<=b.dbablk
  and e.block_id+e.blocks>b.dbablk;
2.3結合SQL視圖可以找到操作這些對象的相關SQL,然後通過優化SQL減少數據的訪問,或者優化某些容易引起爭用的操作(如connect by等操作)來減少熱點塊競爭
  break on hash_value skip 1
  select /*+ rule */ hash_value,sql_text
  from v$sqltext
  where hash_value, address in
  select a.hash_value, a.address
  from v$sqltext a,
  (select distinct a.owner, a.segment_name, a.segment_type
  from dba_extents a,
  (select dbarfil, dbablk
  from select  dbarfil, dbablk
  from x$bh
  order by tch desc
  where rownum<11 b
  where a.relative_fno = b.dbarfil
  and a.block_id <= b.dbablk
  and a.block_id + a.blocks > b.dbablk b
  where a.sql_text like ‘%’ || b.segment_name || ‘%’
  and b.segment_type = ‘TABLE’
  order by  hash_value, address, piece;

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章