Free buffer waits (%)

Description

This event occurs mainly when a server process is trying to read a new buffer into the buffer cache but too many buffers are either pinned or dirty and thus unavailable for reuse. The session posts to DBWR then waits for DBWR to create free buffers by writing out dirty buffers to disk.

DBWR may not be keeping up with writing dirty buffers in the following situations:

Metric Summary

The rest of the information in this section is only valid for this metric when it appears in either the Enterprise Manager Grid Control or the Enterprise Manager Database Control (if applicable).

The following table shows how often the metric's value is collected and compared against the default thresholds. The 'Consecutive Number of Occurrences Preceding Notification' column indicates the consecutive number of times the comparison against thresholds should hold TRUE before an alert is generated.

Target Version

Evaluation and Collection Frequency

Upload Frequency

Operator

Default Warning Threshold

Default Critical Threshold

Consecutive Number of Occurrences Preceding Notification

Alert Text

pre-10g

Every Minute

After Every Sample

>

20

Not Defined

3

%value%%% of service time is spent waiting on the 'free buffer waits' event.

Data Source

(DeltaFreeBufferWaitsTime/DeltaServiceTime)*100 where:

See Idle Events

User Action

Sometimes the easy solution is to increase the buffer cache to allow for more free blocks. This works in many cases, but if the application is generating a sustained amount of dirty blocks then increasing the buffer cache may only help or delay the problem but not solve it.

If this event occurs frequently, examine the session waits for DBWR to see whether there is anything delaying DBWR.

Run this query to see if the I/O is evenly distributed.

SELECT name, phyrds, phywrts      
  FROM v$filestat a, v$datafile b    
  WHERE a.file# = b.file#

Also look for files having full table scans, using this query:

 
SELECT name, phyrds, phyblkrd, phywrts 
  FROM v$filestat a, v$datafile b 
  WHERE a.file# = b.file#   
  AND phyrds != phyblkrd

Related Topics

About Alerts

About the Metric Detail Page

Editing Thresholds

Understanding Line Charts