Oracle 如何启用函数结果缓存
我尝试在11.2.0上使用Oracle,因此我做了以下测试:Oracle 如何启用函数结果缓存,oracle,caching,oracle11g,Oracle,Caching,Oracle11g,我尝试在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; 不过,我的示例每次都打印调用的。我还尝试了一些在线找到的其他示例,但没有使用缓存 我试着改变系统设
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;
不过,我的示例每次都打印调用的。
我还尝试了一些在线找到的其他示例,但没有使用缓存
我试着改变系统设置结果缓存最大大小=10485760代码>
仍然不起作用
我尝试了ALTER SESSION SET result\u cache\u mode=FORCE代码>(不需要)-没有帮助
从dual中选择dbms\u result\u cache.status代码>始终返回禁用的
我做错了什么?您使用的是哪个版本?缓存功能仅在Enterprise Edition中可用,因此如果您在标准版安装中尝试此功能,它将无法工作。它位于。我将在这里添加此信息,因为我发现它对解决类似问题很有用
如果您的状态为DISABLED或BYPASS,请记住
*结果缓存内存区域位于共享池中,因此,结果缓存最大大小的值从共享池大小中消耗。*
因此,请检查以下参数
show parameter shared_pool_size
show parameter result_cache_max_size
show parameter result_cache_mode
你也可以试试
BEGIN
dbms_result_cache.ByPass(False);
END;
/
个人版可能有,但个人版仅适用于Windows,而11gR2尚未在Windows yetOuch上发布。与Enterprise一起试用,效果很好:)非常感谢@Peter Lang-Oracle的大多数性感新功能都是仅适用于EE的(当它们不是收费的额外功能时),因此许可指南是一份重要的阅读材料。同时还要检查SGA_目标是否设置为零。有关所有详细信息,请参阅。