关于latch的一点点理解
latch是ORACLE中锁的一种,它是一种低级锁,是保护SGA中的共享内存,它几乎不排队(latches wait list除外),不会产生死锁。
latch分为no-wait与willing-to-wait模式,以willing-to-wait请求的latch只有少数几个,而且他们一般都有多个子latch.
比如redo copy latch,我们知道redo 最开始产生于PGA中,之后会将redo记录copy到SGA中,要想copy,就需要获得一个
redo copy latch,防止copy过程中redo记录被破坏。而redo copy latch的获取方式是 no-wait方式的,如果请求没有获得,它不会在cpu上面自旋(spin,当然你需要有多个CPU),而是继续以no-wait方式继续请求,因为有多个redo copy latch,很容易获得一个redo copy latch,如果所有的redo copy latch都无法获得,那么就只好以willing-to-wait模式请求redo copy latch了。
以no-wait模式请求latch,会在v$latch.immediate_gets,immediate_misses中记录。
绝大多数的latch都是以will-to-wait模式请求的。他们的信息会记录在gets,misses列。
在多cpu系统中以willing-to-wait模式请求latch过程如下:
1.请求latch,如果没有别的进程拥有该latch,那么直接获得该latch.
2.如果latch被别的进程持有,请求该latch的进程在cpu上自旋一段时间,自旋的次数和时间长短由cpu决定。如果是单cpu,不会自旋,直接休眠。
3.从新尝试获得该latch,如果无法获取(_spin_count次自旋后),记录一个latch free等待事件,然后释放cpu,休眠。如果获得了该latch,则在spin_gets,misses列上加一,自旋的总的次数由_spin_count隐含参数决定。
4.睡眠结束后,继续尝试获取该latch,直到获得该latch为止,同时获得latch的时候会更新sleeps列的信息。
可以查看v$system_event.total_waits来查看latch无法获取的次数,v$system_event.total_waits应该等于v$latch.sleeps,不过因为sleeps是在latch获得之后才更新的,所以tatal_waits查询出来的时候通常大于sleeps。
SQL> select event,total_waits,time_waited,average_wait from v$system_event where event like '%latch%' ;
EVENT TOTAL_WAITS TIME_WAITED AVERAGE_WAIT
---------------------------------------------------------------- ----------- ----------- ------------
latch: cache buffers chains 2 0 0
latch: shared pool 3 0 .06
latch: library cache 1 0 .01
latch free 6 0 0
latch: session allocation 1 0 .01
latch: cache buffers lru chain 3 9 2.86
已选择6行。
SQL> select name,gets,misses,sleeps,spin_gets from v$latch where sleeps!=0;
NAME GETS MISSES SLEEPS SPIN_GETS
-------------------------------------------------- ---------- ---------- ---------- ----------
shared pool 109039 204 3 201
session allocation 264876 307 1 306
cache buffers lru chain 19276 19 3 16
qmn task queue latch 78 9 6 3
library cache 83505 83 1 82
cache buffers chains 960520 47 2 46
已选择6行。
可以看到cache buffers chains 中v$system_event.total_waits等于v$latch.sleeps。
misses通常比spin_gets大,但是他们很接近,gets通常较大,因为每次请求一个latch就会加一。
关于latch的一点点理解相关推荐
- 对Thrift的一点点理解
对Thrift的一点点理解 这是一篇学习Thrift的笔记,包含了这样几点内容: 简单介绍Thrift 怎样使用Thrift Thrift整体架构 Thrift中的知识点 struct可以设置默认值 ...
- 重学概率论的一点点理解(持续更新)
前言:这里是毕业N年后重学概率的一点点理解,因为上学的时候贪玩了,现在到了还的时候,要花费大量的时间,悲剧...所以请同学们抓紧在校时间,务必多夯实基础. 文章内容都是自己手工敲的,算是一点点学习笔记 ...
- HGMMs的一点点理解~
Robust Ellipse Fitting Using Hierarchical Gaussian Mixture Models Motivation Related works Ellipse f ...
- 个人对latch的一些个理解
纯属个人理解![@more@] 说说自己对latch的一些理解,希望能和大家切磋交流.其实自己的这些个理解大部分来源于这些个书籍,列在下边: 1. Oracle Wait Interface: htt ...
- javascript中函数参数以及函数中局部变量作用域一点点理解
2019独角兽企业重金招聘Python工程师标准>>> 函数中局部变量如果与外部变量重名,则用的是函数内部局部变量,用完就会被释放.我的理解函数是一个function定义的代码段,以 ...
- 对线性时不变系统(LTI)中时不变(Time Invariant)的一点点理解
这个博客又找回来了,重新恢复更新 ==========================================x 这个问题讨论的是一个系统对于一个随时间变化的输入信号x的一个处理问题. 时不变 ...
- 对sizeof的一点点理解
sizeof sizeof的常量性 常量性的概念:简单的说就是编译的时候就可以确定他的值了,就好像是const一样 在一些老式的编译器里面你是不能够声明一个不确定大小的数组的,也就是说以下写法是错误的 ...
- 软件定义安全的一点点理解
万事开头难,中间也难,最后也难.第一次写博客,内容.排版都不太好,请见谅.文章内容部分来源绿盟的<软件定义下的新型安全架构和实践>.<软件定义安全>以及<软件定义安全:S ...
- 强化学习(Reinforcement Learning)之策略梯度(Policy Gradient)的一点点理解以及代码的对应解释
一.策略梯度算法推导以及解释 1.1 背景 设πθ(s)\pi_{\theta }(s)πθ(s)是一个有网络参数θ\thetaθ的actor,然后我们让这个actor和环境(environment ...
最新文章
- 循序渐进Python3(二) -- 数据类型
- 【观点】开发人员的测试悖论
- ESB与可插拨系统的思考
- 【构建之法教学项目】一个简单的基于C#的电子商务系统演练场景的代码示例...
- Remove Assignments to Parameters(移除对参数的赋值)
- jenkins 读取json文件_使用插件轻松获取jenkins构建数据
- 上周的工作总结和下周的学习安排
- HDFS常用命令与命令大全及其用法
- GB35114—④、附 录A、B
- TensorRt - caffe中支持prelu
- 《史上最简单的 SpringCloud 教程》系列 (转载 http://blog.csdn.net/forezp/article/details/70148833 本文出自方志朋的博客)
- css选择器的权值与优先规则
- 最大似然估计方法介绍
- 《Intriguing properties of neural networks》代码实现——Pytorch
- 51nod 1526 分配笔名(字典树)
- bugku md5加密相等绕过
- EditPlus中文版-具有 FTP、FTPS 和 sftp 功能的文本编辑器
- android调用fragment的方法,Android Fragment基本使用
- 我的世界服务器修改生成怪物速度的文件,我的世界服务器怎么不生成怪物_禁止服务器产生怪物代码大全_游戏城...
- 高温热水解预处理对厌氧消化期间污泥腐殖化的调控机制
热门文章
- 物联网毕设题目选题推荐
- Redis - 10、主从复制
- 计算机无法保存,无法保存打印机设置0x000006d9?教您怎么办
- [AFCTF2018]One Secret, Two encryption(考点:公钥解析,gcd())
- 在Unity3D中使用精灵动画引擎制作动画的两种方法
- 北京林业大学计算机保研,北京林业大学2021年各专业保研数据详细分析
- 读懂algebraic distances on graphs
- 利用大数据打通政务信息孤岛
- Mysql客户端连接服务端提示“Access denied for user ‘user_name‘@‘xxx.xxx.xx.xx‘ (using password: YES)”
- 为什么说每个人适合的大数据培训课程都可能存在差异?