暂无图片
记一次library cache lock/library cache pin导致的函数编译hang住分析及处理过程
最近更新:2022-03-11 14:21:05

一、前言

业务在进行alter function my_function_name compile的时候,正常来说会非常快(不涉及无法访问的dblink时),但是今天一大早,业务就跟我说,他们有两个函数编译无法通过,现象就是会hang住,需要我进行分析并处理下问题。

二、问题排查

看到这个问题的时候,最初就是认为,数据库肯定是有锁了,导致这个编译过程的语句,执行无法通过。所以,第一时间检查了下数据库中是否存在行锁:

SQL> @block

no rows selected

可以看到,此时并没有排查到数据库有行锁。

此时,我在sqlplus中,手动执行该函数的编译过程:

SQL> select * from v$mystat where rownum<2;

       SID STATISTIC#      VALUE
---------- ---------- ----------
      4994          0          0

SQL>alter function XXX compile;

确实,发现编译过程行住了。

接着,打开另一个会话,查看该会话的运行情况、等待事件及阻塞情况:

SQL> select sid,seq#,event,wait_class from v$session_wait where sid=4994;

                                           WAIT
       SID       SEQ# EVENT                CLASS
......