暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
闩锁、锁定和并发性
1219
52页
46次
2021-08-09
5墨值下载
Oracle 本身是一个多用户并发处理系统,在同一个时间点上,可能会有多个用户
同时操作数据库,这就涉及两个重要的问题
1 、这些用户之间的操作不会互相破坏,比如两个用户同时在相同的物理位置上
写数据时,不能发生互相覆盖的情况,这叫做串行化,也就是说,即便两个用户
同时在写,也必须有先后,一个用户写完,另一个用户继续写,串行化会降低系
统的并发性,但这对保护数据结构不被破坏来说则是必须的
2 、在满足串行化的前提下,如何将并发性提升到最大
Oracle 中通过使用闩锁( latch )和锁定( lock
Latch lock 都是实现串行化的方法
latch 是一个低级别的,轻量级的锁,获得和释放的速度都很快
lock 可能持续很长时间,通过使用队列,先进先出的方式实现
锁的白话意义:一种资源,如果可能发生多个进程同时访问的情况,造成资源的
破坏,那么就需要给这种资源上一个锁,如果这种资源很简单,例如就是内存的
分配和释放,那么就使用 latch ,如果这种资源相对复杂,有一定的逻辑判断,
那么就需要使用 lock
资源的意义很广泛,因为进程总是通过内存来做修改、读取,因此资源都分布在
内存中。
闩锁的概述( latch
Oracle 使用闩锁来实现内存的分配和释放
例如
某个用户进程 A 发出一条 update 语句,要去更新 58 号数据块里的某条记录,则
该用户进程对应的服务器进程在写内存的时候,找到 58 号数据块,并往里写内
容, A 在写 58 号数据块的过程中,这时另外一个用户进程 B 发出 insert 语句,
要将某个新的记录插入到 58 号数据块中,如果没有一定的保护机制, A 正要写
入的空间可能被 B 抢先写入, B 要写入的空间可能被 A 抢先写入,不管哪个用户
先抢先写入,造成的结果就是, 58 号数据块的数据都混乱了
如果使用 latch 来进行保护,简单的描述,任何进程要写数据块时,都必须先获
latch ,在写入过程中,一直持有 latch ,写完以后,释放 latch
A 在写入 58 号数据块的时候,先获得 latch B 也要写 58 号数据块,这时 B
尝试获得 latch ,发现该 latch A 持有, B 进入等待状态,直到 A 释放 latch
B 获得 latch 以后,才能在 58 号数据块中写入数据
of 52
5墨值下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜