以下是对Oracle中Lock与Latch的相同点以及不同点进行了详细的分析介绍
需要的朋友参考下
首先谈谈它们的共同点吧它们本质上都是一种对资源的独占锁定都是由并发引起(如果数据库只有一个session就谈不上锁定)
接着着重谈谈它们的不同点
首先它们的目的不一样enqueue (即LockOracle官方文档混合使用这两个名词在等待事件里可以看到大量的enqueue其实就是lock)是为了解决业务层面的数据争用而latch是为了解决内存资源的争用
其次它们的运行方式不一样enqueue采用排队方式先到先得而latch的竞争近乎无序以一种随机的方式先到不一定先得得靠抢而且它还以一种时间片轮训的方式不会一直霸占即时还没运行完时间片一到也
第三会话持有的时长不一样enqueue根据业务情况可能会持有较长时间而latch通常非常短第四引起的原因不一样enqueue太多通常是业务设计的问题而latch过多一般是数据库层面的问题(如未使用绑定变量表或索引热块等)