返回顶部
首页 > 资讯 > 数据库 >oracle等待事件之free buffer waits
  • 195
分享到

oracle等待事件之free buffer waits

2024-04-02 19:04:59 195人浏览 独家记忆
摘要

1.什么时候会发生free buffer waits呢?     简单来说,当需要在buffer cache中寻找可用块但是找不到时,就会发生这个等待。找寻可用块的理由包括

1.什么时候会发生free buffer waits呢?
    简单来说,当需要在buffer cache中寻找可用块但是找不到时,就会发生这个等待。找寻可用块的理由包括读取数据块到内存中,或者构造CR块。
sql> select name,parameter1,parameter2,parameter3,wait_class from v$event_name where name ='free buffer waits';

NAME                 PARAMETER1           PARAMETER2           PARAMETER3           WAIT_CLASS
-------------------- -------------------- -------------------- -------------------- --------------------
free buffer waits    file#                block#               set-id#              Configuration

2.oracle读取数据块的过程
1)比如Oracle要读取1号对象,2号文件,3号块,首先根据对象号,文件号,块号计算hash值,然后去搜索哈希表,确定是否目标数据块已经存在在内存中。这里的hash表是CBC链的header的集合
2)根据计算出的hash值得到bucket的内存,然后去扫描这个bucket的CBC链,扫描的时候会在CBC latch的保护下,依次对比结果,如果匹配,那么取得BA地址,读取buffer。
3)如果不存在,那么需要在LRU链上寻找可重用的块,在扫描过程中,被pin住的块,TCH大于2的块和脏块不会被重用,pin住的块会被跳过,TCH大于2的块会被移动到LRU链表的热端,TCH小于2的脏块会被移动到LRUW链,当扫描到LRU链的40%时,40%是由隐含参数_db_block_max_scan_pct控制的,此时若还没有找到可覆盖的buffer,将会停止扫描,唤醒DBWR进程写脏块,同时前台进程转入睡眠状态,此时的等待事件就是free buffer waits。
4)如果找到可覆盖的buffer,那么在下一步之前会首先根据脏块的总数,决定是否主动唤醒DBWR进程写脏块,如果脏块数占到了检查点队列的25%,那么不等DBWR进程3秒醒来,而是主动唤醒。25%是由隐含参数_db_large_dirty_queue决定的。主动唤醒是不会有free buffer waits等待的。
5)DBWR进程被唤醒或者3秒醒来写脏块后,将可重用的脏块挂到辅助LRU链表上。
从上述过程可以看到,隐含参数_db_block_max_scan_pct隐含参数通过控制脏块数目,主动唤醒DBWR写脏块,有助于缓解free buffer waits事件。

产生free buffer waits的原因?
1)db_cache_size值太小
2)检查db_writer_processes参数,一般来说这个值不太会主动修改,默认每8个CPU会有一个dbwr进程
3)存储性能有问题,可能写脏数据慢,可能写redo慢
4)延迟块清除,这种行为可能会占用大量的buffer
5)sql效率差,物理读过大或者要构造的CR块过多,比如大表select *,笛卡尔积等

上述读取数据块的过程中提到过扫描LRU链的时候跳过的块的情况可以这么查:
SQL>  select * from v$sysstat where name in ('free buffer inspected','free buffer requested');
STATISTIC# NAME                                CLASS      VALUE    STAT_ID     CON_ID
---------- ------------------------------ ---------- ---------- ---------- ----------
       206 free buffer requested                   8 1134972512 3411924934          0
       210 free buffer inspected                   8  366218879  941676439          0

SQL> select 366218879/1134972512 from dual;

366218879/1134972512
--------------------
           .32266762
free buffer inspected:扫描LRU链寻找可重用的块时候跳过的块的个数
free buffer requested:请求重用块的次数
上述结果表明平均每次请求扫描0.32个块,也就是说一般马上就能拿到重用块。

您可能感兴趣的文档:

--结束END--

本文标题: oracle等待事件之free buffer waits

本文链接: https://lsjlt.com/news/47329.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Oracle 等待事件之 free buffer waits
    free buffer waits官网解释:    This wait event indicates that a server process was unabl...
    99+
    2024-04-02
  • oracle等待事件之free buffer waits
    1.什么时候会发生free buffer waits呢?     简单来说,当需要在buffer cache中寻找可用块但是找不到时,就会发生这个等待。找寻可用块的理由包括...
    99+
    2024-04-02
  • Oracle 等待事件之 buffer busy waits
    buffer busy waits (热块儿争用)官网解释:    This wait indicates that there are some buffers i...
    99+
    2024-04-02
  • Oracle Study之--Oracle等待事件(3)
    Oracle Study之--Oracle等待事件(3)Db file parallel read这是一个很容易引起误导的等待事件,实际上这个等待事件和并行操作(比如并行查询,并行DML)没有关系。 这个事...
    99+
    2024-04-02
  • Oracle Study之--Oracle等待事件(5)
    Oracle Study之--Oracle等待事件(5) Db file single write这个等待事件通常只发生在一种情况下,就是Oracle 更新数据文件头信息时(比如发生Checkpo...
    99+
    2024-04-02
  • Oracle Study之--Oracle等待事件(2)
    Oracle Study之--Oracle等待事件(2)Control file parallel write当数据库中有多个控制文件的拷贝时,Oracle 需要保证信息同步地写到各个控制文件当中,这是一个...
    99+
    2024-04-02
  • Oracle Study之--Oracle等待事件(7)
    Oracle Study之--Oracle等待事件(7) Free buffer waits    当一个会话将数据块从磁盘读到内存中时,它需要到内存中找到空闲的内存空间来存放...
    99+
    2024-04-02
  • Oracle Study之--Oracle等待事件(4)
    Oracle Study之--Oracle等待事件(4) Db file scattered read这个等待事件在实际生产库中经常可以看到,这是一个用户操作引起的等待事件,当用户发出每次I/O需...
    99+
    2024-04-02
  • RAC等待事件:gc buffer busy acquire
    今天监控一直报等待事件异常,查了下数据库基本都是gc buffer busy acquire等待事件。这个等待事件之前一直没接触过,今天特意了解下。...
    99+
    2024-04-02
  • ORACLE的buffer busy wait等待事件怎么解决
    本文小编为大家详细介绍“ORACLE的buffer busy wait等待事件怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“ORACLE的buffer busy wait等待事件怎么解决”文章能帮...
    99+
    2024-04-02
  • 性能优化的分析(free buffer wait等待)
    查看相关的文档,发觉free buffer wait等待一般是由于buffer太小而导致的,可以通过增加buffer的大小解决,如果buffer够大, 则可能在进行全表扫描,调整应用(查询出相关的...
    99+
    2024-04-02
  • oracle等待事件之enq: CF – contentio
    Enqueue 是一种保护共享资源的锁定机制,避免因并发操作而损坏数据,Enqueue 采用排队机制,即 FIFO(先进先出)来控制资源的使用。在任何需要读取控制文件的动作时,就会发生等待事件enq: CF...
    99+
    2024-04-02
  • Oracle Study之--resmgr:cpu quantum等待事件
    Oracle Study之--resmgr:cpu quantum等待事件在AWR Report中出现“resmgr:cpu quantum”等待事件:“resmgr:cpu quantum”等待事件:参考...
    99+
    2024-04-02
  • Oracle Study之-- enq:SQ contention等待事件
    Oracle Study之-- enq:SQ contention等待事件通过AWR Report发现“enq:SQ contention”等待事件:应用环境:转自:http://www.xuebuyuan...
    99+
    2024-04-02
  • Oracle等待事件之enq: TM – contention
    执行DML 期间,为防止对与DML 相关的对象进行修改,执行DML 的进程必须对该表获得TM 锁。 P1 = name|mode P2 = object # P3 = table/partition ...
    99+
    2024-04-02
  • Oracle 等待事件之 db file parallel read
    db file parallel read官网解释:    This happens during recovery. It can also happen duri...
    99+
    2024-04-02
  • Oracle 等待事件之 db file sequential read
    db file sequential read:官网解释:This event signifies that the user process is reading a buffer into the SG...
    99+
    2024-04-02
  • Oracle 等待事件之 db file scattered read
    db file scattered read官网解释:This event signifies that the user process is reading buffers into the SGA ...
    99+
    2024-04-02
  • oracle之 等待事件LOG FILE SYNC (awr)优化
    log file sycn是ORACLE里最普遍的等待事件之一,一般log file sycn的等待时间都非常短 1-5ms,不会有什么问题,但是一旦出问题,往往都比较难解决。什么时候会产生log fi...
    99+
    2024-04-02
  • RAC性能分析 - gc buffer busy acquire 等待事件
    RAC性能分析 - gc buffer busy acquire 等待事件 ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作