library cache lock: 等待:library cache 对象句柄争用(解析/DDL 串行化)
Oracle含义
会话正在等待 library cache 中某个对象(SQL、PL/SQL、表定义)上的锁。通常由解析和 DDL 操作的串行化引起。
原因
对高频使用的对象执行 DDL(ALTER/CREATE)、PL/SQL 对象频繁重新编译(失效)、硬解析过多、依赖对象失效,或大量并发连接风暴。
解决方法
找出阻塞会话和对象(v$session、ASH,必要时使用 library cache lock 诊断)。避免在高峰时段对高频使用的对象执行 DDL。缩短依赖链并防止不必要的重新编译。通过使用绑定变量降低硬解析。用连接池平滑连接风暴。
同一数据库的其他条目
- db file scattered read等待:多块物理读,通常为全表扫描或索引快速全扫描
- buffer busy waits等待:争用一个正被其他会话读取或修改的缓冲区
- gc buffer busy等待(RAC):争用正在实例间传输的 cache fusion 块
- ORA-00604error occurred at recursive SQL level(递归 SQL 级别出错)
- ORA-01438value larger than specified precision allowed for this column(值大于此列允许的指定精度)
- ORA-01400cannot insert NULL into (column)(无法将 NULL 插入(列))
- ORA-02291integrity constraint violated - parent key not found(违反完整约束条件 - 未找到父项关键字)