【DB筆試面試678】在Oracle中,什麼是熱塊?

  • 2019 年 11 月 5 日
  • 筆記

題目部分

在Oracle中,什麼是熱塊?

答案部分

當一個會話需要訪問一個數據塊,而這個數據塊正在被另一個用戶從磁盤讀取到內存中或者這個數據塊正在被另一個會話修改時,當前的會話就需要等待,就會產生一個buffer busy waits等待,也伴隨着Latch爭用。如果太多的會話去訪問相同的數據塊,那麼會導致長時間的buffer busy waits等待,通常表現形式為CPU使用率很高,但吞吐量很低。造成熱塊的原因可能是數據庫設置或者重複執行的SQL語句頻繁訪問一些相同的數據塊。熱塊產生的原因不盡相同,按照數據塊的類型,可以分成表數據塊、索引數據塊、索引根數據塊、文件頭數據塊和數據塊自身的爭用,不同熱塊類型處理的方式是不同的。下面給出找到熱塊的SQL語句:

SELECT OBJECT_NAME,         SUBOBJECT_NAME  FROM   DBA_OBJECTS  WHERE  DATA_OBJECT_ID IN         (SELECT DATA_OBJECT_ID          FROM   (SELECT OBJ DATA_OBJECT_ID,                         FILE#,                         DBABLK,                         CLASS,                         STATE,                         TCH                  FROM   x$bh                  WHERE  HLADDR IN (SELECT ADDR                                    FROM   (SELECT ADDR                                            FROM   V$LATCH_CHILDREN                                            ORDER  BY (GETS + MISSES + SLEEPS) DESC)                                    WHERE  ROWNUM < 10)                  ORDER  BY TCH DESC)          WHERE  ROWNUM < 10);  

本文選自《Oracle程序員面試筆試寶典》,作者:小麥苗