本站中文解释
。
Oracle中的enqueues被定义为一种消息类型,它们是用来实现系统共享资源之间的同步和互斥, 以防止多个实例之间遭受同一共享资源的冲突。enqueues分为两大类:一类是IV (Instance Version), 另一类是 Library Cache Invalidation.
IV(Instance Version) 用于多实例数据库环境中对共享缓存中对象版本(例如:服务/表/索引/视图)的统一管理。每个实例会分配一个唯一的实例id,在这个IV队列中保存实例之间共享的对象版本信息。当实例之间的对象版本有任何的变动的时候,所有的实例都要从IV队列中查询并更新相关的版本信息。比如,当数据库中执行CREATE, ALTER, DROP等操作时,IV队列中的对象版本要发生变化,这样多实例中的每个实例就会检查IV队列以更新对象的版本,以确保各实例之间的对象信息一致。
另一类是Library Cache Invalidation,它用于在 SGA中缓存的语句 (比如 SQL)或者代码片段 (比如 PL/SQL)发生变动后,让SGA缓存中的这些语句或者代码片段能够被及时更新。当数据库对象发生变化,比如建立新的表、删除表中的数据或更新表中的数据时,任何SGA缓存中已缓存的SQL或者PL/SQL语句就会失效,这时就需要在这个Invalidation队列中查看这些旧的缓存语句,然后更新缓存中受影响的SQL或者PL/SQL语句,以使系统能使用最新的SQL或者PL/SQL语句进行查询。
总而言之,Oracle中有两类enqueues,一类是IV(Instance Version),用于共享缓存中对象版本的统一管理;另一类是Library Cache Invalidation请求,用于及时更新SGA缓存中受影响的SQL或者PL/SQL语句,以使系统能使用最新的SQL或者PL/SQL语句进行查询。