首页 > 数据库 >Oracle等待事件(二)—— free buffer wait 常见原因及对应解决方法

Oracle等待事件(二)—— free buffer wait 常见原因及对应解决方法

时间:2023-04-18 10:32:28浏览次数:52  
标签:DBWR buffer cache free Oracle buffers wait


首先看看官方文档中的描述

This wait event indicates that a server process was unable to find a free buffer and has posted the database writer to make free buffers by writing out dirty buffers. A dirty buffer is a buffer whose contents have been modified. Dirty buffers are freed for reuse when DBWR has written the blocks to disk.

当session试图将block读入buffer cache,或者由于读一致需要构造cr的block却找不到free buffer而产生的等待,需要等待DBWR进程将脏块写回磁盘。为什么找不到free buffer,可能原因如下:

 

一、 free buffer wait常见原因

  • buffer cache 太小,free buffer本来就少
  • DML操作并发过高,产生脏块过多,来不及写出
  • DBWR写出过慢,可能是因为DBWR进程过少(db_writer_processes参数),也可能服务器IO有问题
  • 烂SQL导致大量的物理读

 

二、 对应解决方法

  • 加大buffer cache
  • 检查DML操作并发过高原因,是真的需要还是有程序bug,能否错开执行时间,是否有使用索引
  • 如果DBWR进程过少,可以适当增加
  • 如果服务器IO有问题,建议vmotion到较高性能存储
  • SQL使用绑定变量,避免大量物理读
  • 过大sql可以使用直接IO,绕过buffer cache
  • 使用较大的data block(一般不建议)

 

三、 图解Oracle寻找free buffer过程

Oracle等待事件(二)—— free buffer wait 常见原因及对应解决方法_服务器

Oracle等待事件(二)—— free buffer wait 常见原因及对应解决方法_SQL_02

Oracle等待事件(二)—— free buffer wait 常见原因及对应解决方法_SQL_03

buffer cache LRU链如下

Oracle等待事件(二)—— free buffer wait 常见原因及对应解决方法_SQL_04

Oracle等待事件(二)—— free buffer wait 常见原因及对应解决方法_oracle_05

LRU链如下(橙色部分)

Oracle等待事件(二)—— free buffer wait 常见原因及对应解决方法_oracle_06

Oracle等待事件(二)—— free buffer wait 常见原因及对应解决方法_SQL_07

Oracle等待事件(二)—— free buffer wait 常见原因及对应解决方法_服务器_08

Oracle等待事件(二)—— free buffer wait 常见原因及对应解决方法_SQL_09

Oracle等待事件(二)—— free buffer wait 常见原因及对应解决方法_服务器_10

Oracle等待事件(二)—— free buffer wait 常见原因及对应解决方法_oracle_11

Oracle等待事件(二)—— free buffer wait 常见原因及对应解决方法_服务器_12

Oracle等待事件(二)—— free buffer wait 常见原因及对应解决方法_SQL_13

 

参考

https://sites.google.com/site/embtdbo/oracle

https://www.slideshare.net/khailey/oracle-10g-performance-chapter-06-buffer-cache

标签:DBWR,buffer,cache,free,Oracle,buffers,wait
From: https://blog.51cto.com/u_13631369/6202563

相关文章

  • Oracle create index 中途取消后应该如何处理
        有时会遇到这样的情况,在创建索引的过程中啪叽网断了,会话中断;或者创建索引时觉得执行太慢,直接按了crtl+c取消,直接把运行窗口关了...尝试重新建索引的时候会遇到报错ORA-00095索引名已存在,而dropindex时又报错ORA-08104 thisindex isbeingonlinebuiltorrebuilt......
  • Oracle 单进程可用PGA为4G限制导致的ORA-4030报错
    一、问题背景收到开发反馈,系统报表运行过程中报错,一看发现是ORA-4030,内存的问题查看alert日志,发现期间有大量ORA-4030报错,并且主要是pga相关的打开trace文件,可以看到报错进程使用内存接近4G但是查看pga参数设置,发现设置的上限是20G,完全没到,并且期间总的PGA使用率也不高 二、报错......
  • Oracle 常规坏块处理方法
    收到业务反馈,查看erp请求时遇到报错,一看居然是坏块。。。-_-|| alert日志中也出现相关报错,但还好只有一个坏块一、有备份的处理方法这一般就非常简单,rman有坏块修复功能Recoverdatafile19block44;如有必要,可同时修复多个文件多个块Recoverdatafile19block44datafile19......
  • Oracle 列由VARCHAR2改为CLOB类型
    最近突然遇到好多Oracle列由VARCHAR2改为CLOB类型的需求,不知道大家是不是约好了。。。查了一些网上的文章,结合实际修改的情况记录一下各种场景及解决方法。 一、示例准备新建两张表TB_WITHOUT_DATA(VARCHAR2列不包含数据)和TB_WITH_DATA(Varchar2列包含数据)createtableTB_WITHOU......
  • Oracle将想要查询的时间点集合作为一个新表,去另一个表里只查询规定时间点的数据
    最近遇到一个新需求,我们需要在一个表中选取特定时间段内一些固定时间点的数据(比如只想要取每个小时零点的数据),废物的我想不出来,让大佬教的,记录一下。假如这个表长这样,名字就叫Table吧,需要取到每个小时零点的高度 TIMEHEIGHT2023-04-1800:00:0012023-04-1801:00......
  • Oracle Recovery Tools快速恢复断电引起的无法正常启动数据库---惜分飞
    由于异常断电,数据库启动报错ORA-01113和ORA-01110,ORA-00322和ORA-00312以及ORA-00314和ORA-00312错误MonApr1709:35:042023ALTERDATABASEOPENErrorsinfileD:\APP\ADMINISTRATOR\diag\rdbms\orcl\orcl\trace\orcl_ora_10192.trc:ORA-01113:文件1需要介质恢......
  • 实时Oracle 监控和性能分析工具
    概述 MyOra是一种先进的Oracle数据库监控工具,具有最快的响应时间并提供对Oracle数据库的即时可见性。该工具简单、快速且易于使用,无需安装,无需Oracle客户端,也无需互联网连接。下载MyOra并实时监控数据库性能。也可将MyOra用作DBA工具或SQL查询工具。   ......
  • Oracle:centos9 安装 oracle11g
    比较简单。关键点:ln-s/usr/lib64/libnsl.so.1   /usr/lib64/libnsl.soln-sf/u01/app/oracle/product/11.2.0/dbhome_1/lib/stubs/libaio.so.1  /usr/lib64/libaio.so.1vi/u01/app/oracle/product/11.2.0/dbhome_1/sysman/lib/ins_emagent.mk (emdctl:添加-......
  • oracle如何同时往主外键表中插入值
    a(ID1,name,sex)b(ID2,ID1,Fraction)ID1,ID2同为自动增长ID1为b表的外键参照a表的ID11、先创建a和b表的序列CREATESEQUENCESEQ_A;CREATESEQUENCESEQ_B;2、插入A表并返回A表当前IDv_id1number(20);insertintoa(ID1,name,sex)values(SEQ_A.NEXTVAL,name_value......
  • oracle登录
    oracle登录允许错误次数设置一般数据库默认是10次尝试失败后锁住用户1、查看FAILED_LOGIN_ATTEMPTS的值select*fromdba_profiles2、修改为30次alterprofiledefaultlimitFAILED_LOGIN_ATTEMPTS30;3、修改为无限次(为安全起见,不建议使用)alterprofi......