提到数据库发生的library cache: mutex X和library cache lock,同时通过library cache lock的P3计算出对应的NAMESPACE为SQL AREA BUILD。到这里我们很容易想到Failure Parse。这里介绍一个Bug也会导致该问题Bug 16400122 Spikes in library cache mutex contention for SQL using SQL Plan Baseline。
这里对该bug做简单的介绍:该Bug的引发是由于SQL使用了SPM,而SPM需要定期更新Last_executed 字段,而更新改字段时就会把使用该SPM的游标Invalid,如果这时有大量的并发进程执行该SQL,可能会引发性能问题。Last_executed 字段并不是SQL每次执行都会更新的,因为这样会增加递归DML的数量,从而增加数据库负载。那么Last_executed 是怎么更新的呢?当SQL hardparse后,create time会作为一个属性保存在该游标中,并把该时间+6.5,每次该SQL执行时会与当前系统时间比较,如果该值大于系统时间,那么需要修改Last_executed 字段的值。所以,往往发生该问题时,间隔会大于6.5天。