
Oracle 本身是一个多用户并发处理系统,在同一个时间点上,可能会有多个用户
同时操作数据库,这就涉及两个重要的问题
1 、这些用户之间的操作不会互相破坏,比如两个用户同时在相同的物理位置上
写数据时,不能发生互相覆盖的情况,这叫做串行化,也就是说,即便两个用户
同时在写,也必须有先后,一个用户写完,另一个用户继续写,串行化会降低系
统的并发性,但这对保护数据结构不被破坏来说则是必须的
2 、在满足串行化的前提下,如何将并发性提升到最大
Oracle 中通过使用闩锁( latch )和锁定( lock )
Latch 和 lock 都是实现串行化的方法
latch 是一个低级别的,轻量级的锁,获得和释放的速度都很快
lock 可能持续很长时间,通过使用队列,先进先出的方式实现
锁的白话意义:一种资源,如果可能发生多个进程同时访问的情况,造成资源的
破坏,那么就需要给这种资源上一个锁,如果这种资源很简单,例如就是内存的
分配和释放,那么就使用 latch ,如果这种资源相对复杂,有一定的逻辑判断,
那么就需要使用 lock
资源的意义很广泛,因为进程总是通过内存来做修改、读取,因此资源都分布在
内存中。
评论