リリースを間近に控えた環境で、2つの MATERIALIZED VIEWの作成で以下のエラーが発生するとの連絡を受けました。
ORA-00600: 内部エラー・コード, 引数: [KGL-heap-size-exceeded], [0x303FBFEA10]
環境は以下の通りです。
早速MOS(My Oracle Support)で調べてみます。
Bug 29255705 - Inlists queries failing with ORA-600 [optmutrset, KUTYPN(opnmutrset) at %p] when predicates were being pushed to the cells. (ドキュメントID 29255705.8)
回避策は以下3つのうちいずれかになります。
alter session set cell_offload_processing=false;
alter session set "_rowsets_enabled"=false;
alter session set events '10055 trace name context forever, level 512';
1番目のcell_offload_processing=falseを試してもらったところ、一つはエラーが解消しましたが、もうひとつのマテビュー作成はエラーのままでした。
そこで、上記3つとも試してもらったのですが、エラーは解消しませんでした。
更に調査を続けます。
Sqlt Errors with ORA-600 [KGL-heap-size-exceeded] (ドキュメントID 2417499.1)
回避策は以下の通りですが、解消しませんでした。
※セッション単位で設定できないパラメータなので、システム単位で設定し、元に戻しておきます。
ALTER SYSTEM SET "_kgl_large_heap_warning_threshold"=2147483647 SCOPE=BOTH sid='*';
ここでMView作成
ALTER SYSTEM reset "_kgl_large_heap_warning_threshold" SCOPE=BOTH sid='*';
更に調査します。
ORA-600 [KGL-HEAP-SIZE-EXCEEDED] While Adding/Removing a Subscriber In AQ (ドキュメントID 2683875.1)
回避策はBug 30910264 用パッチの適用ですが、これは適用済でした。
更にこちらのドキュメントも参照しました。
ORA-00600: internal error code, arguments: [KGL-heap-size-exceeded] When Using Adavanced Queuing. (ドキュメントID 2629498.1)
こちらの恒久的な対策はBug 30910264用のパッチ適用ですが、一時的な回避策で共有プールのフラッシュとあったので、それも試しましたが解消せず。
で、最終的には以下のドキュメントの回避策で対処できました。
メモリの通知: Library Cache Object loaded into SGA / ORA-600 [KGL-heap-size-exceeded] (ドキュメントID 2455241.1)
一部、抜粋します。
多数のパーティション・サブパーティションを有するオブジェクトの場合、_kgl_large_heap_assert_threshold のデフォルト値は小さすぎることがあり、そのような場合には ORA-600 を回避するために値を増やすべきです。
設定例:
"_kgl_large_heap_assert_threshold" = 1572864000 は制限の閾値を 1500MB に増加させます。
ドキュメントID 2417499.1の回避策で "_kgl_large_heap_warning_threshold"=2147483647を設定したのですが、こちらはアラートログに書き出す時の閾値なので、_kgl_large_heap_assert_thresholdの方を変更しなければならなかったようです。
だったらドキュメントID 2417499.1の記載は何なんでしょう…。
ちなみに、今回はマテビューの作成で発生しましたが、それ以外のSQLであっても、閾値を超えてライブラリキャッシュ・ヒープを使用すると、同じエラーが発生します。
また、この閾値はORA-4031 を引き起こす共有プール内の領域不足を避けるために導入されたもので、恒久的に値を引き上げるのであれば、「SGA_TARGET 及び SHARED_POOL_SIZE を 15% 増加することを検討する」必要があるそうです。