6

11.2.0でOracleの関数結果キャッシュを使用しようとしているので、次のテストを実行しました。

CREATE OR REPLACE FUNCTION get_test_value
  RETURN NUMBER
  RESULT_CACHE
AS
BEGIN
  dbms_output.put_line( 'Called' );
  RETURN 0;
END;

SELECT get_test_value FROM dual;

Calledただし、私の例は毎回印刷されます。
オンラインで見つかった他の例もいくつか試しましたが、キャッシュは使用されていません。

試しましたがALTER SYSTEM SET result_cache_max_size = 10485760;
、まだ機能しません。

私は試しALTER SESSION SET result_cache_mode=FORCE;ました(これは必要ではないはずです)-助けにはなりませんでした。

SELECT dbms_result_cache.status FROM dual;常に。を返しますDISABLED

私は何が間違っているのですか?

4

2 に答える 2

16

どのエディションを使用していますか?キャッシュ機能はEnterpriseEditionでのみ使用できるため、Standard Editionのインストールでこれを試しても、機能しません。ライセンスガイドにあります。

于 2010-02-18T17:58:41.617 に答える
0

同様の問題を解決するのに役立つことがわかったので、ここにこの情報を追加します。

DISABLEDまたはBYPASSのステータスを取得している場合は、覚えておいてください

*結果キャッシュのメモリ領域は共有プールにあるため、result_cache_max_sizeの値は共有プールのサイズから消費されます。*

したがって、次のパラメータを確認してください

show parameter shared_pool_size
show parameter result_cache_max_size
show parameter result_cache_mode

あなたも試すことができます

BEGIN
    dbms_result_cache.ByPass(False);
END;
/
于 2013-05-06T02:37:31.083 に答える