AWR の分析で、ちょっと気になった library cache: mutex X 。
一般的に発生するのは、以下のような場合。
- ハード・パース
- Version Count が高い SQL の実行
ただ今回の環境は、Soft Parse がほぼ 100% で Version count が高い SQL はいませんでした。
ASH から、待機しているセッションを調べてみたところ・・・。
以下の SQL の実行で、library cache: mutex X が発生していました。
select user_function(:bind) from dual;
実機で begin return 1; end; みたいなファンクションをつくって 8多重で実行してみたところ、でました! library cache: mutex X !
どうやらストアドプロシージャの実行で、library cache: mutex X 取るようです。
感覚的にはありそうなきもしますが、なんで? S じゃね?とも思います。
ストアドプロシージャを高多重で実行する場合には性能懸念が考えられるという結論。
mutex なんで競合がなければ気にするレベルじゃないかなと。