本站中文解释
Oracle 事件Buffer Read Retry一般为因为并发性能问题,当发生缓存读取失败而出现的重试操作。
当数据库检索特定块时,如果这块已经被另一个会话拥有的话,就会发生缓存失败的情况,就会出现该事件。
一次缓存会话,会话拥有特定的缓存的用户,当该会话没有释放缓存,另一个会话会话请求该缓存,导致缓存失败,操作系统或数据库将会retry,等待另一个会话释放缓存,也就发生了buffer read retry,也就是缓存读取重试。
Buffer read retry是由更低层次的操作系统和数据库回复而产生的,是主动等待发生缓存失败后回复重试操作。 由于在当前会话时间段内,并发用户高於特定block的持有限制,导致缓存失败,也就是buffer read retry。
一般Buffer read retry事件发生的原因在于:
1),数据库的某块缓存已经被另一个会话持有:
当数据库在检索某一特定块时,如果该块已经被另一个会话拥有了,会导致缓存失败,而触发Buffer read retry。
2),Buffer Cache 无法满足系统的动态增长:
当数据库中,缓存大小不足以满足系统的动态增长时,就会发生Buffer read retry的现象。当特定的块缓存已经满足无法再放下新的数据时,会触发Buffer read retry,等待其他会话释放了缓存,才可以放入新的数据。
3),共享池的不足
Buffer Cache的运行依赖于共享池的大小,如果有新的操作进入,而共享池又无法放入新的数据,也会触发Buffer read retry事件,等待共享池清理出可用空间后才能继续执行操作。
Buffer read retry一般不会有很大影响,尤其是在Concurency因素不是很强的情况下,一般情况下也不会出现这种情况。
解决Buffer read retry,一般是通过调整memlock参数,memlock参数控制着某一块被一些会话持有的次数。通过调整memlock参数,就可以改善这种buffer read retry的情况。
另外,也可以通过扩大buffer的大小,增加共享池的大小,来改善这种现象。
总之,Buffer read retry一般是由以上几个情况产生的,这种情况常常不会有很大的性能下降,但是,也可以通过调整memlock或者扩充buffer,来解决这类情况发生的情况。
官方英文解释
This event occurs only if the instance is mounted in shared mode (Oracle Real Application Cluster).
During the read of the buffer, the contents changed. This means that either:
-
The version number, dba, or the incarnation and sequence number stored in the block no longer match
-
The checksum on the block does not match the checksum in the block
The block will be reread (this may fail up to 3 times), then corruption is assumed and the corrupt block is dumped in the trace file.
Wait Time: The wait time is the elapsed time of the read
Parameter | Description |
---|---|
file# |
See “file#” |
block# |
See “block#” |