1. A user wants to access a data block for read or write operation. The block is present in the Buffer Cache but locked by another session. The user has to wait till the other session releases the lock on that block.
2. A user wants to access a data block for read or write operation. The block is not present in the Buffer Cache. The block has to be read from data files into Buffer Cache. But the same block is being read by another session. Hence the user patiently waits for the IO of the other session to complete. Prior to oracle 10g, this wait is referred to as Buffer busy wait, but from oracle 10g this wait event is referred to as 'read by other session' wait.
Tuning Options,
Run the following query to find whether any block or range of blocks are always responsible for buffer busy waits,
SQL> select p1 "File #", p2 "Block #", p3 "Reason Code" From v$session_wait
where event = 'buffer busy waits';
Use the following query to find the segment the block belongs to,
SQL> select owner,segment_name,segment_type From dba_extentswhere file_id = &file#
and &block# between block_id and block_id + blocks -1;
Once the segment name is identified use the V$Segment_Statistics view to monitor the statistics of the segment.
SQL>select * from v$segment_statistics
where owner like 'RACFIN'
and statistic_name like 'buffer busy waits'
and object_name like 'IBM_PARTY_BRANCH' ;
Use the following query to find what kind of contention is causing the buffer busy waits.
SQL> Select * from v$waitstat;
The output shows the sum and total time of all waits for particular class of block such as data block, segment header, undo header block etc.
To avoid the buffer busy waits,
1. Increase the PCTFREE and PCTUSED values to reduce the number of rows per block to avoid data block contention.
2. Increase the INITRANS value to avoid data block contention.
3. Increase the FREELIST and FREELIST GROUPS value to avoid freelist block contention and segment header block contention.
Thanks
No comments:
Post a Comment