【ASK_ORACLE】Library Cache概念篇(二)之Library Cache Pin的定义

来源:这里教程网 时间:2026-03-03 18:33:33 作者:

Library Cache Pin的定义    这个事件是管理 library cache 并发。Pin 住一个对象会使它使用的 heap 被载入到内存中。如果一个使用者想要修改或检查这个对象,它必须在获得 lock 之后再取得一个 Pin。 Pin 可以用 NULL, SHARE, EXCLUSIVE 模式获得并且可以看做是一种特殊的 lock。等待"library cache pin"意味着这个 PIN 正被某个其它 session 以不兼容的模式持有。     访问当前被缓存到 library cache 中的数据库对象(表,视图,过程,函数,包,包体,触发器,索引,聚簇,同义词)的时候需要获得 library cache pin; 在 library cache 中,数据库对象被缓存成两部分:句柄(handle)和对象(object); 这个锁(pin)只有当"object"部分被缓存的时候才会被持有。     Library cache pin 上的死锁不会被自动检测到,对其的操作是同步进行的! 注:     在10g以后,"library cache pin"已经被 mutex 取代,即 “cursor: pin S wait on X”在Oracle 10.2中开始引入,这里就简单说明下这个等待事件,其原理大同小异。说明如下:    一个会话等待“cursor: pin S wait on X”,当它想在一个特定的游标上以S(共享)模式获得一个互斥锁,但其他会话以X(独占)模式持有同一个互斥锁时。因此当前会话必须等待X模式持有者释放互斥量。      在RAC中,互斥对象对于的当前实例来说是本地的,不是共享的。

相关推荐