Latch闩锁在Oracle中属于 KSL Kernel Services Latching, 而从顶层视图来说 KSL又属于VOS Virtual Operating System。
Latches 是一种 低级别(low-level)的 锁机制, 初学IT的同学请注意 低级不代表简单, C语言对比java语言要 低级一些但C并不比java简单。
SPIN 是指 当进程首先尝试获取latch失败后( 一般是别人持有了该latch), 有2种选择 要么是退让CPU(yield CPU) 休眠一段时间后再重新尝试获取latch , 要么是 本进程抱着希望在CPU 上空转,因为如果我不用CPU了 让给别人用了 就会造成context switch上下文切换 (vmstat 里看到的CS),而我在CPU上空转的话就可以等等看这个latch是否会在这段时间里被人家释放, 我的一次空转称为SPIN 一次, 而SPIN_COUNT定义了我在这次总的SPIN *** 作里总共SPIN 空转多少次,例如SPIN_COUNT=2000(注意 见上文中对SPIN_COUNT的描述)就是说 我有机会空转 2000次, 空转一次后 我跑去查看一下latch是否被别人释放了,如果没有我继续下一次空转, 如果是释放了 那么我就获得这个latch了,也就是SPIN_GETS成功了。如果SPIN 2000次了还是没有等到释放latch,则SPIN_GETS没有成功, 之后该SLEEP就SLEEP( 9i前后 从9i开始有区别,具体见下文)。
from askmaclean2008年,SIGMOD的一篇论文对面向磁盘的数据库性能开销做了分析⌄把整个数据库系统的开销做了统计。分析发现典型的数据库环境中实际上只有12%的资源是在真正处理业务查询和处理逻辑。其中30%用于缓冲区管理,30%处理数据并发控制管理的开销(Locking和Latching),28%处理数据库日志的处理(Logging)。如何降低这些数据库额外开销是考虑的重点方向。建议题主多关注行业公众号,比如 柏睿数据欢迎分享,转载请注明来源:内存溢出
评论列表(0条)