Как включить кэш результатов функций

Я пытаюсь использовать функцию Oracle . Кэш на 11.2.0, поэтому я провел следующий тест:

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.

Что я делаю не так?


person Peter Lang    schedule 18.02.2010    source источник


Ответы (2)


Какое издание вы используете? Функциональность кэша доступна только в Enterprise Edition, поэтому, если вы пытаетесь использовать ее в стандартной версии, это не сработает. Он находится в Руководстве по лицензированию.

person APC    schedule 18.02.2010
comment
В Personal Edition он может быть, но Personal Edition предназначен только для Windows, а 11gR2 еще не вышла для Windows. - person Gary Myers; 19.02.2010
comment
Ой. Пробовал с Enterprise, работает как шарм :) Большое спасибо! - person Peter Lang; 19.02.2010
comment
@Peter Lang - Большинство привлекательных новых функций Oracle, как правило, предназначены только для EE (когда они не являются платными дополнениями), поэтому жизненно важно прочитать Руководство по лицензированию. - person APC; 19.02.2010

Я собираюсь добавить эту информацию здесь, потому что я нашел ее полезной при решении моей аналогичной проблемы.

если вы получаете статус 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;
/
person ShoeLace    schedule 06.05.2013
comment
А также проверьте, установлен ли SGA_TARGET в ноль. См. docs.oracle.com /database/121/TGDBA/ для получения подробной информации. - person Mark Stewart; 26.06.2018