- 浏览: 1019638 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (529)
- 服务器 (8)
- jsp (1)
- java (6)
- AIX (1)
- solaris (3)
- linux学习 (53)
- javaScript (2)
- hibernate (1)
- 数据库 (74)
- sql语句 (8)
- oracle 学习 (75)
- oracle 案例 (42)
- oracle 管理 (42)
- Oracle RAC (27)
- oracle data guard (12)
- oracle 参数讲解 (14)
- Oracle 字符集 (8)
- oracle性能调优 (24)
- oracle备份与恢复 (12)
- oracle Tablespace (9)
- oracle性能诊断艺术 (1)
- oracle 11g学习 (5)
- oracle streams (1)
- oracle upgrade and downgrade (4)
- db2学习 (13)
- db2命令学习 (2)
- mysql (28)
- sql server (30)
- sql server 2008 (0)
- 工具 (10)
- 操作系统 (3)
- c++ (1)
- stock (1)
- 生活 (5)
- HADOOP (2)
最新评论
-
massjcy:
...
如何将ubuntu文件夹中文名改为英文 -
skypiea:
谢谢。。。
终于解决了。。。
Oracle 10.2.0.4(5)EM不能启动的解决方案(Patch 8350262) -
qwe_rt:
引用vi /etc/sysconfig/network 请问 ...
Linux操作系统下配置静态IP上网 -
liuqiang:
sudo killall -9 apache2
ps 和 kill 命令详解 -
dazuiba:
引用*绝杀 kill -9 PID 当使用此命令时,一定要通过 ...
ps 和 kill 命令详解
在Oracle Database 11g中,Oracle引入了一个令人关注的新特性:结果集缓存(Result Cache)。
顾名思义,这个新特性的含义就是将查询的结果集Cache起来,以便随后相同的查询请求可以直接利用,从而避免了再次查询。今天开始来学习一下这个新特性。
进一步的Result Cache又可以分为:Server Result Cache 和 Client Result Cache。
前者通过服务器端SGA来缓存结果集,后者通过客户端来缓存结果集。
缓存是提高性能的一个常用手段,可以说在Oracle数据库中,Cache无处不在。
对于Client Result Cache:
在使用OCI应用程序时,可以通过客户端内存来缓存查询的结果集,缓存结果可以在所有session间共享,当查询反复执行时,查询结果可以直接从客户段的缓存中获得,从而极大地提高应用效率。
客户端结果集缓存并不使用服务器端的内存,不会对服务器的内存使用造成影响,这一点和Server Result Cache不同。
同Client Result Cache相关的视图主要有:
SQL> select * from dict where table_name like '%CLIENT_RESULT_CACHE%';
TABLE_NAME COMMENTS
------------------------------ ---------------------------------------------
CLIENT_RESULT_CACHE_STATS$ Synonym for CRCSTATS_$
GV$CLIENT_RESULT_CACHE_STATS Synonym for GV_$CLIENT_RESULT_CACHE_STATS
V$CLIENT_RESULT_CACHE_STATS Synonym for V_$CLIENT_RESULT_CACHE_STATS
同Client Result Cache相关的参数有:
SQL> show parameter client_result
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
client_result_cache_lag big integer 3000
client_result_cache_size big integer 0
如果我们不想启用Client Result Cache的特性,可以设置参数client_result_cache_size为0即可。
对于Server Result Cache:
服务器端结果集缓存使用Shared Pool中的内存来进行结果缓存,这部分内存使用可以通过v$sgastat视图来查询观察:
SQL> select * from v$sgastat
2 where lower(name) like '%result%';
POOL NAME BYTES
------------ -------------------------- ----------
shared pool Result Cache: State Objs 2852
shared pool Result Cache: Memory Mgr 124
shared pool Result Cache: Bloom Fltr 2048
shared pool Result Cache: Cache Mgr 108
进一步的和Result Cache相关的视图有:
SQL> select * from dict where table_name like '%RESULT_CACHE%';
TABLE_NAME COMMENTS
------------------------------ ---------------------------------------------
CLIENT_RESULT_CACHE_STATS$ Synonym for CRCSTATS_$
GV$CLIENT_RESULT_CACHE_STATS Synonym for GV_$CLIENT_RESULT_CACHE_STATS
GV$RESULT_CACHE_DEPENDENCY Synonym for GV_$RESULT_CACHE_DEPENDENCY
GV$RESULT_CACHE_MEMORY Synonym for GV_$RESULT_CACHE_MEMORY
GV$RESULT_CACHE_OBJECTS Synonym for GV_$RESULT_CACHE_OBJECTS
GV$RESULT_CACHE_STATISTICS Synonym for GV_$RESULT_CACHE_STATISTICS
V$CLIENT_RESULT_CACHE_STATS Synonym for V_$CLIENT_RESULT_CACHE_STATS
V$RESULT_CACHE_DEPENDENCY Synonym for V_$RESULT_CACHE_DEPENDENCY
V$RESULT_CACHE_MEMORY Synonym for V_$RESULT_CACHE_MEMORY
V$RESULT_CACHE_OBJECTS Synonym for V_$RESULT_CACHE_OBJECTS
V$RESULT_CACHE_STATISTICS Synonym for V_$RESULT_CACHE_STATISTICS
11 rows selected.
相关的参数主要有:
SQL> show parameter result_cache_max
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
result_cache_max_result integer 5
result_cache_max_size big integer 992K
类似的,result_cache_max_size参数可以被看作Server Result Cache的一个开关,如果设置为0,则Server Result Cache功能会被禁用。而result_cache_max_result则用于定义每个Cache结果集能够使用的Result Cache的百分比。
参数result_cache_mode用于控制Server Result Cache的方式,该参数有3个选项:Manual、AUTO、Force
SQL> show parameter result_cache_mo
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
result_cache_mode string MANUAL
Oracle11g还引入了一个package专门用于管理server result cache:dbms_result_cache
清空server result cache
SQL> exec dbms_result_cache.flush
PL/SQL procedure successfully completed.
查看server 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 = 1184K bytes (1184 blocks)
Maximum Result Size = 59K bytes (59 blocks)
[Memory]
Total Memory = 5132 bytes [0.006% of the Shared Pool]
... Fixed Memory = 5132 bytes [0.006% of the Shared Pool]
... Dynamic Memory = 0 bytes [0.000% of the Shared Pool]
PL/SQL procedure successfully completed.
通过动态性能视图v$result_cache_statistics可以知道server result cache的使用统计信息。
SQL> select * from v$result_cache_statistics;
ID NAME VALUE
---------- ------------------------------ ----------
1 Block Size (Bytes) 1024
2 Block Count Maximum 1184
3 Block Count Current 0
4 Result Size Maximum (Blocks) 59
5 Create Count Success 0
6 Create Count Failure 0
7 Find Count 0
8 Invalidation Count 0
9 Delete Count Invalid 0
10 Delete Count Valid 0
10 rows selected.
其他相关动态性能视图:
v$result_cache_objects
v$result_cache_memory
v$result_cache_dependency
下面我们看一个实际的例子
SQL> set autotrace on
SQL> select /*+ result_cache */ count(*) from test;
COUNT(*)
----------
11865
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=48 Card=1)
1 0 RESULT CACHE OF '7rkq2h8sb7kdg5sjxw69z8c45g'
2 1 SORT (AGGREGATE)
3 2 TABLE ACCESS (FULL) OF 'TEST' (TABLE) (Cost=48 Card=12024)
Statistics
----------------------------------------------------------
337 recursive calls
0 db block gets
291 consistent gets
0 physical reads
0 redo size
352 bytes sent via SQL*Net to client
500 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
5 sorts (memory)
0 sorts (disk)
1 rows processed
注意到执行计划中的RESULT CACHE OF ‘7rkq2h8sb7kdg5sjxw69z8c45g’,说明已经缓存前面两步的结果。
再来看result cache的内存使用情况
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 = 1184K bytes (1184 blocks)
Maximum Result Size = 59K bytes (59 blocks)
[Memory]
Total Memory = 103528 bytes [0.112% of the Shared Pool]
... Fixed Memory = 5132 bytes [0.006% of the Shared Pool]
... Dynamic Memory = 98396 bytes [0.107% of the Shared Pool]
....... Overhead = 65628 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.
查看v$result_cache_statistics
SQL> select * from v$result_cache_statistics;
ID NAME VALUE
---------- ------------------------------ ----------
1 Block Size (Bytes) 1024
2 Block Count Maximum 1184
3 Block Count Current 32
4 Result Size Maximum (Blocks) 59
5 Create Count Success 1
6 Create Count Failure 0
7 Find Count 0
8 Invalidation Count 0
9 Delete Count Invalid 0
10 Delete Count Valid 0
注意到Create Count Success=1说明成功的缓存了一笔记录
再次执行该查询
SQL> select /*+ result_cache */ count(*) from test;
COUNT(*)
----------
11865
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=48 Card=1)
1 0 RESULT CACHE OF '7rkq2h8sb7kdg5sjxw69z8c45g'
2 1 SORT (AGGREGATE)
3 2 TABLE ACCESS (FULL) OF 'TEST' (TABLE) (Cost=48 Card=12024)
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
0 consistent gets
0 physical reads
0 redo size
352 bytes sent via SQL*Net to client
500 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
注意到这里consistent gets=0,也就是该查询甚至不产生逻辑读了,也就是直接从result cache中获得了查询结果。
查看v$result_cache_statistics
SQL> select * from v$result_cache_statistics;
ID NAME VALUE
---------- ------------------------------ ----------
1 Block Size (Bytes) 1024
2 Block Count Maximum 1184
3 Block Count Current 32
4 Result Size Maximum (Blocks) 59
5 Create Count Success 1
6 Create Count Failure 0
7 Find Count 1
8 Invalidation Count 0
9 Delete Count Invalid 0
10 Delete Count Valid 0
注意到Find Count = 1,说明上次缓存的结果被后续的查询应用了一次。如果继续执行该查询,可以发现该统计信息相应增加。
当然,这个例子中,缓存了整个查询的结果,实际上也可以缓存执行计划中某一步或者某几步的查询结果。例如,下面的例子中,就缓存了子查询的结果
SQL> select count(*) from (select /*+result_cache*/* from test where object_id<100);
COUNT(*)
----------
98
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=48 Card=1)
1 0 SORT (AGGREGATE)
2 1 VIEW (Cost=48 Card=237)
3 2 RESULT CACHE OF 'fbbc5y53mwuj75buth9d2vwkkn'
4 3 TABLE ACCESS (FULL) OF 'TEST' (TABLE) (Cost=48 Card=237 Bytes=37446)
Statistics
----------------------------------------------------------
716 recursive calls
4 db block gets
403 consistent gets
0 physical reads
0 redo size
350 bytes sent via SQL*Net to client
500 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
23 sorts (memory)
0 sorts (disk)
1 rows processed
SQL> select count(*) from (select /*+result_cache*/* from test where object_id<100);
COUNT(*)
----------
98
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=48 Card=1)
1 0 SORT (AGGREGATE)
2 1 VIEW (Cost=48 Card=237)
3 2 RESULT CACHE OF 'fbbc5y53mwuj75buth9d2vwkkn'
4 3 TABLE ACCESS (FULL) OF 'TEST' (TABLE) (Cost=48 Card=237 Bytes=37446)
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
0 consistent gets
0 physical reads
0 redo size
350 bytes sent via SQL*Net to client
500 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
参考Metalink: SQL Query Result Cache
A separate shared memory pool is now used for storing and retrieving cached results. Query retrieval from the query result cache is faster than rerunning the query. Frequently executed queries will see performance improvements when using the query result cache.
The new query result cache enables explicit caching of results in database memory. Subsequent queries using the cached results will experience significant performance improvements.
Enable Result Caching :
You can set the RESULT_CACHE_MODE initialization parameter to control whether the SQL query result cache is used for all queries (when possible).
This parameter can be set at the system, session, or table level to the following values:
MANUAL - The results of a query can only be stored in the result cache by using the result_cache hint.
FORCE - All results are stored in the result cache.
Example:
If the RESULT_CACHE_MODE parameter is set to MANUAL then you must explicitly use the /*+ result_cache */ hint in your query to store the results of a query in the result cache.
SELECT /*+ result_cache */ deptno, avg(sal)
FROM emp
GROUP BY deptno;
If the RESULT_CACHE_MODE parameter is set to FORCE, and you do not wish to include the result of the query in the result cache, then you must use the /*+ no_result_cache */ hint in your query.
SELECT /*+ no_result_cache */ deptno, avg(sal)
FROM emp
GROUP BY deptno;
The database automatically invalidates a cached result whenever a transaction modifies the data or metadata of any of the database objects used to construct that cached result.
发表评论
-
oracle11g 不可见索引
2012-06-28 22:48 6索引维护是DBA的一项重要工作。当一个系统运行很长一段时间,经 ... -
oracle11g 不可见索引
2012-06-28 22:48 1790索引维护是DBA的一项重要工作。当一个系统运行很长一段时间,经 ... -
oracle11g 不可见索引
2012-06-28 22:48 4索引维护是DBA的一项重要工作。当一个系统运行很长一段时间,经 ... -
oracle 快照数据库和物理备库的转换
2012-06-19 13:32 1769SQL> select * from v$version ... -
ORACLE11G 自动内存管理学习
2011-03-14 14:55 2122Oracle在简化内存管理方面过去几年做了巨大的努力,从Ora ... -
Oracle 11g Alert Log日志信息的变化
2010-12-26 21:49 1959从 Oracle 11g 开始,Oracle 数据库以XML与 ...
相关推荐
### ORACLE 11G 新特性详解 #### 一、安装与配置 在 Oracle 11G 中,安装过程变得更加简化且易于管理。通过 Oracle Universal Installer (OUI) 安装 Oracle 11g 时,可以选择 OraInventory 目录进行安装。此外,在...
SQL Query Result Cache是Oracle 11g引入的一种性能优化新技术,旨在提高数据库系统的查询效率,减少不必要的计算和I/O操作。这一特性通过缓存SQL查询的结果来避免重复执行相同的查询,从而节省系统资源。 7.1 ...
Oracle数据库作为企业级应用的主流数据库管理系统,其11g版本是相当知名并且广泛使用的一个版本。Oracle 11g体系架构涉及许多核心组件和概念,下面将根据文档提供的内容详细解释这些知识点。 首先,Oracle 11g体系...
Oracle 11g 提供了一种新的技术,名为 Server Result Cache,用于显著提高查询速度,尤其是在处理大量数据和重复查询的场景下。该技术的核心在于能够缓存查询结果,使得后续相同的查询可以直接从缓存中获取结果,而...
Oracle 11g在性能管理方面引入了一系列新特性,这些改进显著提升了数据库的性能和管理员的工作效率。本文将深入探讨其中的关键功能。 1. 结果缓存功能 (Result Caching Functionality) 1.1 概述 结果缓存是...
### Oracle 11g体系-全面详解 #### 第一部分 体系架构 ##### 第一章:实例与数据库 **1.1 Oracle基础架构及应用环境** Oracle 11g的架构设计旨在提供高效、稳定和安全的数据管理解决方案。该版本不仅在技术上...
4. Result Cache:负责管理查询结果的缓存。 5. Latches:负责管理共享资源的锁机制。 6. Reserved Pool:负责管理预留的共享内存池。 7. User Global Area (UGA):负责管理用户的会话信息。 8. Program Global Area...
4. **利用Oracle 11g的PL/SQL新特性**:如ResultCache功能可以改善用户体验,而改进的正则表达式功能则使得Web日志分析更加高效。 5. **数据迁移**:Oracle SQL Developer中的快速迁移功能帮助支付宝高效地将部分...
在Oracle 11g中引入了Result Cache,进一步优化了SQL查询的性能,它可以存储查询结果,当相同的查询再次执行时,可以直接从缓存中获取结果,减少数据库的处理负载。 6. **SQL解析与执行**:Oracle解析SQL语句后,...
### ITPUB电子期刊第十七期:聚焦Oracle数据库11g新特性 #### Oracle数据库11g概述 Oracle数据库11g是Oracle公司推出的全新一代数据库管理系统,它不仅继承了Oracle数据库系列的强大功能,还引入了一系列重要的...
Result Cache是Oracle数据库中的一个特性,用于缓存SQL查询的结果,从而提高性能。题目中提到的情况是关于`result_cache_max_size`参数的设置及其对Result Cache的影响。 - **参数设置**:`result_cache_max_size`...
4. **利用Oracle 11g新增的PL/SQL特性**:例如ResultCache功能改善了用户体验,改进后的正则表达式功能使Web日志分析变得更加便捷。 5. **快速迁移工具**:Oracle SQL Developer内置的快速迁移功能帮助支付宝将部分...
Understand and use new Oracle Database 11g features, including the edition-based redefinition capability, the function result cache, the new CONTINUE statement, fine-grained dependency tracking, ...
作为Oracle融合中间件的一部分,Oracle SOA套件11g通过集成Oracle服务总线11g,能够将复杂的、易碎的应用架构转变为灵活且易于调整的业务网络。Oracle服务总线11g以标准化的方式协调和管理服务及应用,提高了系统的...
Oracle 11g引入了Result Cache功能,进一步提升性能。Result Cache分为Server和Client两部分,允许缓存SQL查询的结果,避免重复计算,从而显著减少I/O操作和网络通信。 此外,书中还涉及了在瓶颈处寻找性能突破的...
Oracle Database 11g引入了一个专门用于结果缓存的区域——Server Result Cache。它位于SGA的Shared Pool中,与其他如数据字典缓存、库缓存等并存。通过调整参数RESULT_CACHE_MAX_SIZE,可以控制Server Result Cache...
最新的Oracle In Memory 版本引入了一些重要的新特性: - **星型模式和预先计算的KPI**:增强了对星型模型的支持,并允许预先计算关键性能指标(KPIs),从而提高仪表板性能。 - **写一次,读一次**:简化了数据...