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个块,也就是说一般马上就能拿到重用块。
oracle等待事件之free buffer waits
来源:这里教程网
时间:2026-03-03 12:57:34
作者:
编辑推荐:
- oracle等待事件之free buffer waits03-03
- 巧用SmartArt图形制作Word组织结构图03-03
- 修改Word默认模板的方法03-03
- Linux 6.9 加盘后的Oracle 12c ASM DiskGroup配置过程03-03
- 使用Word实现按姓氏笔划排序名单的方法03-03
- Word文档打印技巧03-03
- 9个Word技巧,提高工作效率03-03
- [20190225]ORA-07217错误.txt03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- WRH$_ACTIVE_SESSION_HISTORY未自动清理导致SYSAUX空间过度增长的处理方法
- Debian监控业务指标配置(手把手教你用Prometheus+Grafana搭建Debian系统性能监控平台)
- 【kingsql分享】Oracle跨版本迁移之XTTS_V4版本的实施
【kingsql分享】Oracle跨版本迁移之XTTS_V4版本的实施
26-03-03 - PLSQL Developer 提示字段名,回车后卡顿解决
PLSQL Developer 提示字段名,回车后卡顿解决
26-03-03 - oracle 正则表达式4个主要函数
oracle 正则表达式4个主要函数
26-03-03 - 数据泵:expdp/impdp
数据泵:expdp/impdp
26-03-03 - 用listagg函数分组实现列转行
用listagg函数分组实现列转行
26-03-03 - Debian网络身份认证详解(手把手教你配置Debian系统下的企业级WiFi与有线网络身份验证)
- Oracle Exadata 存储服务器原理探究
Oracle Exadata 存储服务器原理探究
26-03-03 - 我们都被骗了,所有的跨平台迁移都可以通过XTTS实现
我们都被骗了,所有的跨平台迁移都可以通过XTTS实现
26-03-03
