Steve Adams的书中的latch levels提到:
It is very common for an Oracle process to need to hold a number of latches
concurrently. Therefore, there might be a possibility of latching deadlocks
occurring—namely, one process holding latch A and another process holding
latch B, and both processes spinning and waiting for the alternate latch. Oracle
ensures that this cannot happen by ensuring that latches are always taken in a
defined order, when more than one latch is required. To support this, every latch
in Oracle has a level between and 15, and a 2-byte bitmap is maintained for every
process representing the levels of the latches that the process is currently holding.
When a process attempts to get a latch in willing-to-wait mode, a check is made
to ensure that it is not already holding a latch at the same level or at a higher
level. In general, if this rule is broken, an ORA-600 [504] internal error is
raised.
Contention for a high-level latch such as the redo allocation latch (level 6) can
easily exacerbate contention for lower-level latches such as the cache buffers
chains latches (level 1 in Oracle 8.1).
It is very common for an Oracle process to need to hold a number of latches
concurrently. Therefore, there might be a possibility of latching deadlocks
occurring—namely, one process holding latch A and another process holding
latch B, and both processes spinning and waiting for the alternate latch. Oracle
ensures that this cannot happen by ensuring that latches are always taken in a
defined order, when more than one latch is required. To support this, every latch
in Oracle has a level between and 15, and a 2-byte bitmap is maintained for every
process representing the levels of the latches that the process is currently holding.
When a process attempts to get a latch in willing-to-wait mode, a check is made
to ensure that it is not already holding a latch at the same level or at a higher
level. In general, if this rule is broken, an ORA-600 [504] internal error is
raised.
Contention for a high-level latch such as the redo allocation latch (level 6) can
easily exacerbate contention for lower-level latches such as the cache buffers
chains latches (level 1 in Oracle 8.1).
level的规定,实际上是对进程获得latch进行了序列化、串行化控制。
简单地使用level 来控制(争用相对少,这样实现简单、成本低,如果采用 lock 机制那成本太高了),避免 dead lock。
简单地使用level 来控制(争用相对少,这样实现简单、成本低,如果采用 lock 机制那成本太高了),避免 dead lock。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13750068/viewspace-731425/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/13750068/viewspace-731425/