Как включить кэш результатов функций
Вопрос
Я пытаюсь использовать 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
.
Что я делаю не так?
Решение
Какую редакцию вы используете?Функциональность кэша доступна только в Enterprise Edition, поэтому, если вы попробуете это сделать при установке Standard Edition, это не сработает.Это в Руководство по лицензированию.
Другие советы
Я собираюсь добавить эту информацию сюда, потому что нашел ее полезной при решении моей аналогичной проблемы.
если вы получаете статус ОТКЛЮЧЕН или ОБХОД, помните
*Область памяти кэша результатов расположена в общем пуле, поэтому значение 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;
/