【DB笔试面试678】在Oracle中,什么是热块?_Oracle

♣  

题目         部分

在Oracle中,什么是热块?


     


♣  

答案部分          


当一个会话需要访问一个数据块,而这个数据块正在被另一个用户从磁盘读取到内存中或者这个数据块正在被另一个会话修改时,当前的会话就需要等待,就会产生一个buffer busy waits等待,也伴随着Latch争用。如果太多的会话去访问相同的数据块,那么会导致长时间的buffer busy waits等待,通常表现形式为CPU使用率很高,但吞吐量很低。造成热块的原因可能是数据库设置或者重复执行的SQL语句频繁访问一些相同的数据块。热块产生的原因不尽相同,按照数据块的类型,可以分成表数据块、索引数据块、索引根数据块、文件头数据块和数据块自身的争用,不同热块类型处理的方式是不同的。下面给出找到热块的SQL语句:

 1SELECT OBJECT_NAME,
 2       SUBOBJECT_NAME
 3FROM   DBA_OBJECTS
 4WHERE  DATA_OBJECT_ID IN
 5       (SELECT DATA_OBJECT_ID
 6        FROM   (SELECT OBJ DATA_OBJECT_ID,
 7                       FILE#,
 8                       DBABLK,
 9                       CLASS,
10                       STATE,
11                       TCH
12                FROM   x$bh
13                WHERE  HLADDR IN (SELECT ADDR
14                                  FROM   (SELECT ADDR
15                                          FROM   V$LATCH_CHILDREN
16                                          ORDER  BY (GETS + MISSES + SLEEPS) DESC)
17                                  WHERE  ROWNUM < 10)
18                ORDER  BY TCH DESC)
19        WHERE  ROWNUM < 10);