ITPub博客

首页 > 数据库 > Oracle > SQL Query Result Cache的使用和配置--Oracle 11G新特性

SQL Query Result Cache的使用和配置--Oracle 11G新特性

Oracle 作者:raysuen 时间:2017-06-14 09:06:36 0 删除 编辑
##buffer cache和result cache的区别
1 Buffer Cache中存储的是需要访问的数据
2 Result Cache是访问数据的结果数据
因此Result Cache的作用比Buffer Cache有效很多

##参数含义和配置建议
#result_cache_mode
MANUAL : 表示当遇见中增加相关的hint(/*+ result_cache */)时,才使用Result Cache技术。该值为缺省值。
FORCE :表示只要有可能,所有查询语句都将使用Result Cache技术。
AUTO :表示优化程序将根据重复的执行操作确定将哪些结果存储在高速缓存中。

#result_cache_max_size,该参数设置Result Cache的最大容量。如果设置为0,则将关闭Result Cache功能。该参数的缺省值,依赖于内存的管理模式和相关参数配置
memory_target设置时 : result_cache_max_size=memory_target*0.25%
sga_target设置时 : result_cache_max_size=sga_target*0.5%
shared_pool_size设置时 : result_cache_max_size=shared_pool_size*1%
该参数最大不能超过shared_pool_size的75%。

#result_cache_max_result,该参数为单个sql查询语句设置可使用的最大Result Cache容量,缺省为result_cache_max_size的5%

#result_cache_remote_expiration,该参数表示当sql语句访问远程数据库对象时,允许远程对象数据发生变化的过期时间,缺省值为0,表示一旦远程对象数据发生变化,相关查询的Result Cache数据变为invalid。

##Result Cache的使用
/*+ result_cache */
/*+ no_result_cache */

##Result Cache的管理
SQL> desc DBMS_RESULT_CACHE
PROCEDURE BYPASS
Argument Name                  Type                    In/Out Default?
------------------------------ ----------------------- ------ --------
BYPASS_MODE                    BOOLEAN                 IN
SESSION                        BOOLEAN                 IN     DEFAULT
FUNCTION DELETE_DEPENDENCY RETURNS NUMBER
Argument Name                  Type                    In/Out Default?
------------------------------ ----------------------- ------ --------
OWNER                          VARCHAR2                IN
NAME                           VARCHAR2                IN
PROCEDURE DELETE_DEPENDENCY
Argument Name                  Type                    In/Out Default?
------------------------------ ----------------------- ------ --------
OWNER                          VARCHAR2                IN
NAME                           VARCHAR2                IN
FUNCTION DELETE_DEPENDENCY RETURNS NUMBER
Argument Name                  Type                    In/Out Default?
------------------------------ ----------------------- ------ --------
OBJECT_ID                      BINARY_INTEGER          IN
PROCEDURE DELETE_DEPENDENCY
Argument Name                  Type                    In/Out Default?
------------------------------ ----------------------- ------ --------
OBJECT_ID                      BINARY_INTEGER          IN
FUNCTION FLUSH RETURNS BOOLEAN
Argument Name                  Type                    In/Out Default?
------------------------------ ----------------------- ------ --------
RETAINMEM                      BOOLEAN                 IN     DEFAULT
RETAINSTA                      BOOLEAN                 IN     DEFAULT
GLOBAL                         BOOLEAN                 IN     DEFAULT
PROCEDURE FLUSH
Argument Name                  Type                    In/Out Default?
------------------------------ ----------------------- ------ --------
RETAINMEM                      BOOLEAN                 IN     DEFAULT
RETAINSTA                      BOOLEAN                 IN     DEFAULT
GLOBAL                         BOOLEAN                 IN     DEFAULT
FUNCTION INVALIDATE RETURNS NUMBER
Argument Name                  Type                    In/Out Default?
------------------------------ ----------------------- ------ --------
OWNER                          VARCHAR2                IN
NAME                           VARCHAR2                IN
PROCEDURE INVALIDATE
Argument Name                  Type                    In/Out Default?
------------------------------ ----------------------- ------ --------
OWNER                          VARCHAR2                IN
NAME                           VARCHAR2                IN
FUNCTION INVALIDATE RETURNS NUMBER
Argument Name                  Type                    In/Out Default?
------------------------------ ----------------------- ------ --------
OBJECT_ID                      BINARY_INTEGER          IN
PROCEDURE INVALIDATE
Argument Name                  Type                    In/Out Default?
------------------------------ ----------------------- ------ --------
OBJECT_ID                      BINARY_INTEGER          IN
FUNCTION INVALIDATE_OBJECT RETURNS NUMBER
Argument Name                  Type                    In/Out Default?
------------------------------ ----------------------- ------ --------
ID                             BINARY_INTEGER          IN
PROCEDURE INVALIDATE_OBJECT
Argument Name                  Type                    In/Out Default?
------------------------------ ----------------------- ------ --------
ID                             BINARY_INTEGER          IN
FUNCTION INVALIDATE_OBJECT RETURNS NUMBER
Argument Name                  Type                    In/Out Default?
------------------------------ ----------------------- ------ --------
CACHE_ID                       VARCHAR2                IN
PROCEDURE INVALIDATE_OBJECT
Argument Name                  Type                    In/Out Default?
------------------------------ ----------------------- ------ --------
CACHE_ID                       VARCHAR2                IN
PROCEDURE MEMORY_REPORT
Argument Name                  Type                    In/Out Default?
------------------------------ ----------------------- ------ --------
DETAILED                       BOOLEAN                 IN     DEFAULT
FUNCTION STATUS RETURNS VARCHAR2

#查询Result Cache的状态
SQL> select DBMS_RESULT_CACHE.status from dual;

STATUS
--------------------------------------------------------------------------------
ENABLED

SQL>

#Result Cache的使用情况
SQL> set serveroutput on
SQL> exec DBMS_RESULT_CACHE.MEMORY_REPORT;
R e s u l t   C a c h e   M e m o r y   R e p o r t
[Parameters]
Block Size          = 1K bytes
Maximum Cache Size  = 37056K bytes (37056 blocks)
Maximum Result Size = 1852K bytes (1852 blocks)
[Memory]
Total Memory = 169328 bytes [0.015% of the Shared Pool]
... Fixed Memory = 5352 bytes [0.000% of the Shared Pool]
... Dynamic Memory = 163976 bytes [0.014% of the Shared Pool]
....... Overhead = 131208 bytes
....... Cache Memory = 32K bytes (32 blocks)
........... Unused Memory = 30 blocks
........... Used Memory = 2 blocks
............... Dependencies = 1 blocks (1 count)
............... Results = 1 blocks
................... SQL     = 1 blocks (1 count)

PL/SQL procedure successfully completed.

SQL>

#清空 Result Cache
SQL> exec DBMS_RESULT_CACHE.FLUSH;

PL/SQL procedure successfully completed.

SQL> exec DBMS_RESULT_CACHE.MEMORY_REPORT;
R e s u l t   C a c h e   M e m o r y   R e p o r t
[Parameters]
Block Size          = 0 bytes
Maximum Cache Size  = 0 bytes (0 blocks)
Maximum Result Size = 0 bytes (0 blocks)
[Memory]
Total Memory = 5352 bytes [0.000% of the Shared Pool]
... Fixed Memory = 5352 bytes [0.000% of the Shared Pool]
... Dynamic Memory = 0 bytes [0.000% of the Shared Pool]

PL/SQL procedure successfully completed.

SQL>

#将指定表的Result Cache设置为invalid
SQL> exec DBMS_RESULT_CACHE.INVALIDATE('SCOTT','EMP');

PL/SQL procedure successfully completed.

SQL>

##Result Cache的相关视图

(g)v$result_cache_statistics : 该视图显示Result Cache设置和该内存使用情况的统计信息
SQL> desc v$result_cache_statistics
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
ID                                                 NUMBER
NAME                                               VARCHAR2(128)
VALUE                                              VARCHAR2(81)

SQL>

(g)v$result_cache_memory : 该视图显示Result Cache 所有内存卡和相关统计信息
SQL> desc v$result_cache_memory
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
ID                                                 NUMBER
CHUNK                                              NUMBER
OFFSET                                             NUMBER
FREE                                               VARCHAR2(3)
OBJECT_ID                                          NUMBER
POSITION                                           NUMBER

SQL>

(g)v$result_cache_objects : 该视图显示Result Cache 中被缓存的对象,包括结果集数据和依赖的表及相关属性数据。
SQL> desc v$result_cache_objects
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
ID                                                 NUMBER
TYPE                                               VARCHAR2(10)
STATUS                                             VARCHAR2(9)
BUCKET_NO                                          NUMBER
HASH                                               NUMBER
NAME                                               VARCHAR2(128)
NAMESPACE                                          VARCHAR2(5)
CREATION_TIMESTAMP                                 DATE
CREATOR_UID                                        NUMBER
DEPEND_COUNT                                       NUMBER
BLOCK_COUNT                                        NUMBER
SCN                                                NUMBER
COLUMN_COUNT                                       NUMBER
PIN_COUNT                                          NUMBER
SCAN_COUNT                                         NUMBER
ROW_COUNT                                          NUMBER
ROW_SIZE_MAX                                       NUMBER
ROW_SIZE_MIN                                       NUMBER
ROW_SIZE_AVG                                       NUMBER
BUILD_TIME                                         NUMBER
LRU_NUMBER                                         NUMBER
OBJECT_NO                                          NUMBER
INVALIDATIONS                                      NUMBER
SPACE_OVERHEAD                                     NUMBER
SPACE_UNUSED                                       NUMBER
CACHE_ID                                           VARCHAR2(93)
CACHE_KEY                                          VARCHAR2(93)
DB_LINK                                            VARCHAR2(3)
CHECKSUM                                           NUMBER

SQL>

(g)v$result_cache_dependency : 该视图显示结果集数据和依赖表的关联关系
SQL> desc v$result_cache_dependency
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
RESULT_ID                                          NUMBER
DEPEND_ID                                          NUMBER
OBJECT_NO                                          NUMBER

SQL>

##Result Cache相关技术点
#Result Cache与RAC
RAC支持Result Cache技术。
RAC环境中的每个实例都有自己的Result Cache,每个实例的Result Cache不能共享。即保存在Result Cache中的数据只能被本实例的应用访问。
但是,一旦保持在某个Result Cache中的数据变成invalid,则整个RAC环境中的各个Result Cache中的该数据豆浆变成invalid。
ORACLE通过专门的RCBG进程,处理RAC环境下Result Cache之间的数据同步。

#Result Cache与并行处理
并行处理也支持Result Cache技术。在并行查询中,整个查询结果集将被保存在Result Cache中,也就是说,整个并行查询语句方可使用Result Cache中的查询结果,单个并行查询子进程无法访问Result Cache。
在RAC环境下,并行查询结果保存在查询协调进程(query coordinator)所在市里的Result Cache中。

#Result Cache的局限
1 系统临时表(Temporary Table)和数据字典宝不支持Result Cache技术
2 非确定的(Nodeterministic) PL/SQL 函数不支持Result Cache技术
3 查询语句若出现序列的currval、nextval,则不支持Result Cache技术
4 查询语句若出现current_date()、sysdate()、sys_guid()等函数,则不支持Result Cache技术

##Result Cache的其他技术点
#Result Cache支持flashback查询
#Result Cache不会自动释放内存,oracle将一直使用该内存到最大限额值,然后通过FIFO技术释放相关内存。也可通过DBMS_RESULT_CACHE.FLUSH情况Result Cache内存
#Result Cache支持绑定变量。针对绑定变量语句,Result Cache不仅保存结果集,二期保存相关变量值。这样只有相同变量值的查询语句,方可使用其在Result Cache中的结果集


##客户端Result Cache技术
#客户端参数
client_result_cache_size : 该参数定义单个客户端进程所使用的Result Cache最大值。如果设置为0,则关闭Result Cache客户端技术。该参数缺省值为0
client_result_cache_lag: 该参数定义客户端与服务器端最后一次往返时间阀值,在该时间阀值内,客户端将向服务端查询客户端Result Cache中的数据是否发生变化,该参数的缺省值为3000毫秒。即每3秒,oracle将客户端Result Cache的数据与服务端进行一次同步

#客户端Result Cache配置
在sqlnet.ora中设置
oci_client_result_cache_max_size;
oci_client_result_cache_max_rset_size;
oci_client_result_cache_max_rset_rows;


##PL/SQL使用Result Cache
create or replace function ProductName
(varName varType)
return nvarchar2
Result_Cache relies_on (table_name)
is
variables_name varTytpe;
begin
end;
/
函数声明部分增加Result_Cache关键字,并且可增加relies_on短语,表示函数依赖后面的括号里面的表。当依赖表的数据发生变更时,该函数的结果集将变为invalid。


内容整理自:罗敏 <<感悟oracle核心技术>>

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28572479/viewspace-2140708/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
擅长oracle,Linux。精通shell,python。

注册时间:2016-08-23

  • 博文量
    145
  • 访问量
    227105