Oracle 等待事件 buffer deadlock 官方解释,作用,如何使用及优化方法

本站中文解释

Oracle事件buffer deadlock, 也称作buffer cache deadlock,指的是在Oracle数据库服务器中,两个不同的进程试图同时访问同一个buffer,却都不让对方进行访问,这就造成了“buffer deadlock”,buffer deadlock对于Oracle数据库服务器来说,十分致命。

具体来讲,buffer deadlock发生的情况主要有两种:第一,当另外一个进程试图访问某个buffer,而该buffer正被你也拥有的另一个进程访问的时候,这时这个buffer就会出现一种deadlock的情况;第二,当一个进程所试图访问的buffer,另外一个进程也正准备试图访问的时候,此时这个buffer也会出现deadlock的情况。在这种情况下,紧接着,这两个事务就会停止并一直处于等待状态。因为它们都不希望让出内存空间,也不让对方继续读写。

有时,如果发生了buffer deadlock,系统就会报告“enq:TM-contention”和“enq:TX-row lock contention”。这两个错误一般都表明系统出现了buffer cache deadlock。

对于buffer deadlock,Oracle可以采取一些步骤进行防范。首先,可以在数据库实例服务器上设置“contention threshold”, 因为一旦出现buffer deadlock, 那么系统将会自动终止这种争用状态,即会使用锁的等待的方式来解决这个问题。其次,建议把数据库的缓冲缓冲池设置得够大,以免发生“buffer cache deadlock”。

除此之外,Oracle还可以利用另外的“lock resolution”机制,来保证系统的正常运行,例如使用分散读取技术(scatter reads),确保进程正在访问一个固定的buffer,而不是一直改变着。再比如,利用“group commit”机制来提高内存访问的性能。

综上所述,buffer deadlock是Oracle数据库服务器中的一种十分致命的错误,如果发生,将对数据库服务器的正常运行造成严重的影响,因此,建议采取积极的预防措施,避免发生buffer deadlock。

官方英文解释

Oracle does not really wait on this event; the foreground only yields the CPU. Thus, the chances of catching this event are very low. This is not an application induced deadlock, but an assumed deadlock by the cache layer. The cache layer cannot get a buffer in a certain mode within a certain amount of time.

Wait Time: 0 seconds. The foreground process only yields the CPU and will usually be placed at the end of the CPU run queue.

Parameter Description

class

See “class”

mode

See “mode”

flag

The flag points to the internal flags used by the session to get this block

dba

See “dba”


数据运维技术 » Oracle 等待事件 buffer deadlock 官方解释,作用,如何使用及优化方法