`

关于Latch与Spin

阅读更多

latch 是一种轻量级用于保护oracle共享内存结构,用户并发操作一致性的串行化锁定机制,如SGA中,各种数据被反复从磁盘读取到内存中,如果有并发用户做相同的实情,oracle必须使用一种机制来保证数据在读取的时候只能由一个会话来完成,这就是latch,latch不会造成阻塞,只会导致等待,与每个latch相联系的还有一个清楚的过程,当持有latch进程成为死进程时,系统清楚过程就会被调用;系统lock导致用户等待,需要考虑系统的逻辑设计是否有问题,如多用户对主键的删除或者修改,是否有用户使用select...for update这样的语法,外键是否创建索引。 latch争用多半要考虑系统及数据库自身的设计问题,如绑定变量、热块及参数设置是否合理。

 

spin 比如数据缓存中某个块要被读取,我们会获得这个块的latch,这个过程就叫spin;另外一个进程恰好要修改这个块,它也要spin这个块,此时它必须等待。当前一个进程释放latch才能spin住,然后修改。如果多个进程同时请求的话,他们之间出现竞争,没有一个入队机制,一旦前面进程释放锁定,后面的进程就蜂拥而上,没有一个先来后到的概念。并且这一切都发生非常快,因为latch的特点是快而短暂!

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics