已索引
This will happen if:
- All buffer gets have been suspended. This could happen when a file was read-only and is now read-write. All the existing buffers need to be invalidated since they are not linked to lock elements. So cache buffers are not assigned to data block addresses until the invalidation is finished.
- The session moved some dirty buffers to the dirty queue and now this dirty queue is full. The dirty queue needs to be written first. The session will wait on this event and try again to find a free buffer
- This also happens after inspecting free buffer inspected buffers. If no free buffer is found, Oracle waits for one second, and then tries to get the buffer again (depends on the context).
原因总结:
- 系统I/O成为瓶颈(或者性能不够)
- 等待资源(latch 争用)
- SGA 太小,无可用的 free buffer
- SGA 太大,DBW 无法快速的把脏数据刷到磁盘上
解决办法:
- 增大SGA
- 优化I/O(提高I/O通道的性能、异步1/0、加多个 DBW 进程)