I am getting a significant BUFFER BUSY WAITS in my Database server, where as Buffer hit % is showing 99% along with Dict Hit % and Lib Cache Hit %. Should I have to resize my Buffer parameter value?
Thank you very much. I am pasting my Wait events details with memory status, can you please help me - the areas I have to look into and how. I will appreciate your time. ---- I am poor in tuning and learning....
Top 5 Wait Events
~~~~~~~~~~~~~~~~~ Wait % Total
Event Waits Time (cs) Wt Time
-------------------------------------------- ------------ ------------ -------
SQL*Net more data to client 7,529,071 0 .00
db file sequential read 6,392,464 0 .00
buffer busy waits 2,150,518 0 .00
latch free 296,948 0 .00
db file parallel write 240,094 0 .00
-------------------------------------------------------------
Wait Events for DB: GENPROD Instance: genprod Snaps: 1035 -1036
-> cs - centisecond - 100th of a second
-> ms - millisecond - 1000th of a second
-> ordered by wait time desc, waits desc (idle events last)
I think there is no problem with the size of your buffer cache.Thew problem is your database IO.
1)db file sequential read
2)buffer busy waits
Have a look at your sql's being used
The type of buffer that causes the wait can be queried using the v$waitstat view. This view lists the waits per buffer type for buffer busy waits, where COUNT is the sum of all waits for the class of block, and TIME is the sum of all wait times for that class:
select * from v$waitstat;
The columns of the v$session_wait view that are of particular interest for a buffer busy wait event are:
P1—The absolute file number for the data file involved in the wait.
P2—The block number within the data file referenced in P1 that is being waited upon.
P3—The reason code describing why the wait is occurring.
Here's an Oracle data dictionary query for these values:
select
p1 "File #".
p2 "Block #",
p3 "Reason Code"
from
v$session_wait
where
event = 'buffer busy waits';
If the output from repeatedly running the above query shows that a block or range of blocks is experiencing waits, the following query should show the name and type of the segment:
select
owner,
segment_name,
segment_type
from
dba_extents
where
file_id = &P1
and
&P2 between block_id and block_id + blocks -1;
Its okay many of us are novices in tuning :-)..You can upload ur statspack report to this website for recommendations
You don't have any wait timings! I've put
timed_statistics = true
in the init.ora (I think you can also do an ALTER SYSTEM). The overhead is negligeable (they say). Not much point analysing until you know HOW LONG you have waited.
I followed your steps. I enabled the TIMED_STATISTICS=TRUE and performed the followings:
1. Found out all Wait Blocks and Class from V$WAITSTAT.
2. I found out the FILES,BLOCKS causing BUFFER BUSY WAITS.
3. Found out the SEGMENTS related to the above FILES and BLOCKS.
I have the following questions/doubts for you. Will appreciate your time again.
1) I can see a Significant COUNT for FREELIST and DATA BLOCK CLASS/BLOCK in v$WAITSTAT view. I understand now, that it will be a solution to add more FREELIST to the objects to get rid of BUFFER BUSY WAITS. But when I see all the SQL statements runnig on my server, NONE of them are trying to INSERT data into table. Only LARGE SELECTS on the above SEGMENTS are there from multiple processes.
a. IN SUCH CASE, do you think ADDING FREELIST will help me?
b. OR Suggest me if I have to take care of other things.
c. I was reading in one of the Oracle site that, BUFFER
BUSY WAITS might occur due to access of the same rows in a
block/buffer by multiple processes and they are suggesting
to reduce NO of ROWS per block. HOW TO REDUCE # OF ROWS
PER BLOCK?
2) The parameter PROCESSES are set to 1000. Which is in a higher side. Does this high value has any effect to the performance
===
c. I was reading in one of the Oracle site that, BUFFER
BUSY WAITS might occur due to access of the same rows in a
block/buffer by multiple processes and they are suggesting
to reduce NO of ROWS per block. HOW TO REDUCE # OF ROWS
PER BLOCK?
===
There are many ways to reduce buffer busy waits:
1 Increase PCTFREE
2 HASH Partition the table
3 If the table has many columns (say 100), then split into 2 tables - each one will have 50 columns.
4 If possible, redesign the application
Bookmarks