Oracle Study之--Oracle等待事件(7)

简介:

 Free buffer waits
    当一个会话将数据块从磁盘读到内存中时,它需要到内存中找到空闲的内存空间来存放这些数据块,当内存中没有空闲的空间时,就会产生这个等待;除此之外,还有一种情况就是会话在做一致性读时,需要构造数据块在某个时刻的前映像(image),此时需要申请内存来存放这些新构造的数据块,如果内存中无法找到这样的内存块,也会发生这个等待事件。
当数据库中出现比较严重的free buffer waits等待事件时,可能的原因是:
(1)data buffer 太小,导致空闲空间不够
(2)内存中的脏数据太多,DBWR无法及时将这些脏数据写到磁盘中以释放空间
这个等待事件包含2个参数:
File#: 需要读取的数据块所在的数据文件的文件号。
Block#: 需要读取的数据块块号。
案例分析:

1
2
3
4
5
6
7
8
11 : 14 : 33  SYS@ prod>show parameter cache
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_16k_cache_size                    big integer 24M
db_cache_advice                      string      ON
db_cache_size                        big integer 16M
db_keep_cache_size                   big integer  0
db_recycle_cache_size                big integer 12M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
11 : 21 : 17  SYS@ prod>conn scott/tiger
Connected.
11 : 23 : 16  SCOTT@ prod>begin
11 : 25 : 04    2     for  in  1. .100000  loop
11 : 25 : 04    3     insert  into  t1 values (i);
11 : 25 : 04    4     end loop;
11 : 25 : 04    5     end;
11 : 25 : 04    6     /
PL/SQL procedure successfully completed.
 
11 : 23 : 29  SYS@ prod>conn tom/tom
Connected.
 
11 : 23 : 38  TOM@ prod>create table t1  as  select *  from  scott.t1;
Table created.
Elapsed:  00 : 00 : 02.19
 
11 : 23 : 52  TOM@ prod>begin
11 : 24 : 59    2     for  in  1. .100000  loop
11 : 24 : 59    3     insert  into  t1 values (i);
11 : 24 : 59    4     end loop;
11 : 24 : 59    5     end;
11 : 24 : 59    6     /
PL/SQL procedure successfully completed.
 
11 : 25 : 12  SYS@ prod>select event,TOTAL_WAITS,AVERAGE_WAIT,EVENT_ID  from  v$system_event
   2 *   where  event like  '%buffer%'
EVENT                                                            TOTAL_WAITS AVERAGE_WAIT   EVENT_ID
---------------------------------------------------------------- ----------- ------------ ----------
latch: cache buffers chains                                                 3            .2  2779959231
free buffer waits                                                          14           .86  2701153470
buffer busy waits                                                           2           .23  2161531084
log buffer space                                                            7         40.42  3357856061
latch: cache buffers lru chain                                             17           .32  3401628503
buffer deadlock                                                            11           .03   218992928
6  rows selected.

Latch free
在10g之前的版本里,latch free 等待事件代表了所有的latch等待,在10g以后,一些常用的latch事件已经被独立了出来:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
11 : 25 :2name1 SYS@ prod>select  name  from  v$event_name  where  name like  'latch%'  order by  1 ;
NAME
----------------------------------------------------------------
latch activity
latch free
latch: Change Notification Hash table latch
latch: In memory undo latch
latch: MQL Tracking Latch
latch: PX hash array latch
latch: Undo Hint Latch
latch: WCR: processes HT
latch: WCR: sync
latch: cache buffer handles
latch: cache buffers chains
latch: cache buffers lru chain
latch: call allocation
latch: change notification client cache latch
latch: checkpoint queue latch
latch: enqueue hash chains
latch: gc element
NAME
----------------------------------------------------------------
latch: gcs resource hash
latch: ges resource hash list
latch: lob segment dispenser latch
latch: lob segment hash table latch
latch: lob segment query latch
latch: messages
latch: object queue header operation
latch: parallel query alloc buffer
latch: redo allocation
latch: redo copy
latch: redo writing
latch: row cache objects
latch: session allocation
latch: shared pool
latch: undo global data
latch: virtual circuit queues
33  rows selected.
 
11 : 39 : 21  SYS@ prod>select EVENT#,EVENT_ID,NAME,PARAMETER1,PARAMETER2,PARAMETER3   from  v$event_name
   2 where  name like  '%latch free%'
 
     EVENT#   EVENT_ID NAME                           PARAMETER1 PARAMETER2           PARAMETER3
---------- ---------- ------------------------------ ---------- -------------------- ------------------------------
        402  3474287957  latch free                     address    number               tries
        409  2530878290  wait list latch free           address    number               tries
 
        11 : 32 : 33  SYS@ prod>desc v$latchname
  Name                                                              Null?    Type
  ----------------------------------------------------------------- -------- --------------------------------------------
  LATCH#                                                                     NUMBER
  NAME                                                                       VARCHAR2( 64 )
  HASH                                                                       NUMBER
所以latch free 等待事件在10g以后的版本中并不常见,而是以具体的Latch 等待事件出现。这个等待事件有三个参数:Address: 会话等待的latch 地址。 Number : latch号,通过这个号,可以从v$latchname 视图中找到这个latch 的相关的信息,Tries: 会话尝试获取Latch 的次数。
11 : 34 : 25  SYS@ prod>select *  from  v$latchname
11 : 34 : 36    2   where  name like  '%buffer%' ;
     LATCH# NAME                                                                   HASH
---------- ---------------------------------------------------------------- ----------
         33  SGA IO buffer pool latch                                          2719726273
         63  IPC stats buffer allocation latch                                 1449990452
        106  KJC global post event buffer                                      3098969798
        145  cache buffers lru chain                                           3559635447
        146  buffer pool                                                        510014793
        150  cache buffers chains                                              3563305585
        151  cache buffer handles                                               892398878
        196  media recovery process out of buffers                             2731251867
        197  mapped buffers lru chain                                            93631960
        208  lock DBA buffer during media recovery                             3620457631
        350  virtual circuit buffers                                           1577520421
        378  parallel query alloc buffer                                        291345605
        416  image handles of buffered messages latch                          3223585260
        476  buffer pin latch                                                  3925519355
14  rows selected.









本文转自 客居天涯 51CTO博客,原文链接:http://blog.51cto.com/tiany/1537334,如需转载请自行联系原作者
目录
相关文章
|
SQL 监控 Oracle
Oracle 数据库发生等待事件:enq: TX - row lock contention ,排查思路
Oracle 数据库发生等待事件:enq: TX - row lock contention ,排查思路
Oracle 数据库发生等待事件:enq: TX - row lock contention ,排查思路
|
存储 Oracle 关系型数据库
Oracle中“ORA-00060: 等待资源时检测到死锁” 或存储过程编译卡死的一种解决方法
Oracle中“ORA-00060: 等待资源时检测到死锁” 或存储过程编译卡死的一种解决方法
813 0
|
5月前
|
消息中间件 Oracle 关系型数据库
使用 cx_Oracle 在 Oracle 中等待记录并执行操作
问题背景: 在第一个 Python 项目中,需要等待记录被插入 Oracle 表中,一旦记录存在,就调用 Python 函数。目前使用 cx_Oracle 库,采用一种无限循环的方式来查询表。如果记录存在,就调用函数,然后等待 5 秒后重新开始循环。但这种方式效率不高,等待时间太长,并且系统看起来很慢。如果不想要每秒都向数据库发送查询,是否有其他方法来等待记录并执行操作?
|
SQL 存储 Oracle
Oracle优化03-Latch和等待
Oracle优化03-Latch和等待
175 0
|
Oracle 前端开发 Java
Oracle优化11-10046事件
Oracle优化11-10046事件
89 0
|
SQL Oracle 关系型数据库
Oracle优化12-10053事件
Oracle优化12-10053事件
102 0
|
Oracle 关系型数据库 数据库
Oracle-等待事件解读
Oracle-等待事件解读
99 0
|
SQL Oracle 关系型数据库
Oracle 等待事件研究:SQL*Net break/reset to client
SQL*Net break/reset to client事件是一个容易被误解的事件,这个事件看起来和网络有关,但实际上大多数情况下这个事件与网络无关。
578 0
Oracle 等待事件研究:SQL*Net break/reset to client
|
SQL 存储 监控
Oracle中的SQL_TRACE是什么?诊断事件是什么?常用的10046及10053诊断事件的区别是什么?
Oracle中的SQL_TRACE是什么?诊断事件是什么?常用的10046及10053诊断事件的区别是什么?
508 0
|
Oracle 关系型数据库 数据库
❤️Oracle TOP5事件解读,性能优化必备技能❤️
❤️Oracle TOP5事件解读,性能优化必备技能❤️
313 0
❤️Oracle TOP5事件解读,性能优化必备技能❤️