|
我们看一下oracle 官方资料
Buffer Modes:
KCBMNEW : New buffer for exclusive access
KCBMSHR : Current buffer for shared access
KCBMEXL : Current buffer for exclusive access
KCBMCR : CR buffer for shared access
KCBMCRX : Variant of CR mode
KCBMNULL : Used to keep a reference to the buffer
Mode Compatibilities:
requested mode
new shr exl cr crx null
held null y y y y y y
shr n y n y y n
exl n n n n n n
Getting Current Buffers
Searching for current buffers:
Scan the hash chain to which the RDBA maps.
For each buffer in the chain:
Ignore buffers that do not match RDBA
Wait for READING buffer and return them
Skip CR (consistent read) buffers
If the CUR (current) buffer is held in a compatible mode, then use it
Otherwise if all other users are CR state objects
– Make it a CR copy and create a new EXLCUR copy of the buffer
– Or wait for the current buffer to be released
If no usable buffers exist in cache, read from disk
Attach a state object to the buffer header
Return pointer to data area
Buffer busy waits
The buffer we want is either being read into the buffer cache by another process, or it is in an incompatible mode and is being modified. Normally the wait time is one second, except in the case if this is the second wait for an exclusive block, in which case the wait is three seconds. This event is the indication for data block contention, the same buffer is requested by more than one process at any given time. Reducing waits on this event depends on the block type (data, segment header, undo).
buffer busy wait 和 IMU 没有什么关系,IMU只是在 imu commit 时批量提REDO。
|
|