SlideShare uma empresa Scribd logo
1 de 6
Baixar para ler offline
§1 Oracle 查询数据缓存问题

关键字:Oracle、SQL Query Result Cache 、DBMS_RESULT_CACHE

读者级别:中级

作者:赵元杰



   概要:虽然现在的存储的容量每年以倍数增长,但是,存储子系统的 I/O
速度并没有像它的容量那样令人满意,       这样的原因导致对大数据量表进行读取时
消耗较长 I/O 时间,而当数据被读到内存后不能持续保存在内存里,以至于我们再
次需要这些数据时,不得不重新从磁盘中读取,导至多次重复读取相同的数据。
这里介绍基于 Oracle 11g 版本的缓存数据的方法,可解决这个问题。


§1.1 将查询结果缓存在内存很重要吗 ?

     使用过 Oracle 系统的技术人员都知道,如果一个应用系统在查询过程中,
过多的物理读就意味着应用处理的效率很低。导致大量的物理读的主要原因是
Oracle 系统在搜索需要的数据块时,在内存无法找到而必须从数据文件读取。如
果,处理需要的数据块能在内存找到,当然就省去了物理 I/O 的处理。从而减少
整个应用的处理总时间了。


§1.2 11g 版本结果缓存的新功能

  对于 Oracle 11g 版本来说,有许多弥补过去旧版本的不足的功能,比如我
们关心的结果缓存的问题,Oracle 11g 版本可实现在服务器端的结果缓存和客户
端的结果的缓存。对于用户来说,最为关心的莫过于服务器端的缓存了。

      服务端的缓存可使用两种方法来实现使用,       一个是在查询语句中加提示(/*+
result_cache */ )的方法;另外一个是通过内置包(DBMS_RESULT_CACHE)的方
法。下面是这两种方法使用介绍:


§1.2.1 使用 RESULT_CACHE 提示实现结果缓存

     对于编程人员来说,    采用 Oracle 系统的 SQL 语句提示可谓是最方便,Oracle
11g 提供 RESULT_CACHE(使用结果缓存)/NO_RESULT_CACHE(不使用结果缓
存)来实现提示

--Oracle11g 版本:
SELECT /*+ result_cache */ state, sum(order_total)
FROM     order_history
WHERE    order_date BETWEEN ’1-JAN-09’ AND ’1-JAN-10’
GROUP BY state;



§1.2.2 关于 NO_RESULT_CACHE 提示

      如果使用结果缓存功能,Oracle 系统会将数据结构存放在共享池内,如果
Oracle 服务器的内存比较小,而某些表已经采用了 Alter Table <table_name>
result_cache 的话,会出现只有查询这个<table_name>表,Oracle 会自动启用数
据结构缓存方法,这样回答内存被大量结果缓存所占用,所以,可采用
NO_RESULT_CACHE 来实现不使用结果缓存的提示

--Oracle11g 版本:
SELECT /*+ NO_RESULT_CACHE */ prod_id, SUM(amount_sold)
FROM sales
GROUP BY prod_id
ORDER BY prod_id;



§1.2.3 DBMS_RESULT_CACHE 包的使用
DBMS_RESULT_CACHE 可实现在 PL/SQL 中编程使用。这个包有下面的程序:
存储过程                 功能
FLUSH                清除整个结果缓存的内容
MEMORY_REPORT        列出结果缓存内存利用的一个概要(默认)或详细的报表。
INVALIDATE           使结果缓存中一个特定对象的缓存结果无效
INVALIDATE_OBJECT 根据缓存 ID 使一特定结果缓存无效
                     返回结果缓存的当前状态。值包括:
                     ENABLED:结果缓存是激活的
STATUS               DISABLED:结果缓存是不可用的
                     BYPASSED:结果缓存暂时不可用
                     SYNC:结果缓存是可用的,但是目前正与其他 RAC 节点重新同步


下面例子表示绕过缓存的机制功能:
--Oracle11g 版本:


SQL> execute dbms_result_cache.bypass(bypass_mode => TRUE, session => TRUE);


PL/SQL procedure successfully completed




下面例子列出目前内存中缓存的情况信息:
--Oracle 11g 版本:
EXECUTE 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 = 1024 bytes
Maximum Cache Size = 950272 bytes (928 blocks)
Maximum Result Size = 47104 bytes (46 blocks)
[Memory]
Total Memory = 46340 bytes [0.048% of the Shared Pool]
... Fixed Memory = 10696 bytes [0.011% of the Shared Pool]
... State Object Pool = 2852 bytes [0.003% of the Shared Pool]
... Cache Memory = 32792 bytes (32 blocks) [0.034% of the Shared Pool]
....... Unused Memory = 30 blocks
....... Used Memory = 2 blocks
........... Dependencies = 1 blocks
........... Results = 1 blocks
............... SQL = 1 blocks
PL/SQL procedure successfully completed.




§1.3 结果缓存的管理与监控

§1.3.1 有关缓存参数与调整
对于 Oracle 11g 服务器结果缓存来说,Oracle 系统提供下面参数供 DBA 调整:

1.RESULT_CACHE_MODE 参数:
这个参数的可能值为:
     MANUAL (default) – 查询提示或表注释
     FORCE – 每个结果都缓存(不推荐)
     AUTO– 更多的选择

2.RESULT_CACHE_MAX_SIZE 参数:
这个参数表示使用结果缓存的最大值,可能为:
     分配给 server result cache 的总数
     0 (Disabled), 0.25% (memory_target), 0.5% (sga_target) 及           ~1%
       (shared_pool_size)

3.RESULT_CACHE_MAX_RESULT 参数:
    这个参数的含义是:
     分配给单个结果集的总数
     5% (Default)
例 1:显示当前缓存有关的参数:

连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> show parameter RESULT_CACHE

NAME                                                       TYPE               VALUE
------------------------------------ ----------- ------------------------------
client_result_cache_lag                           big integer 3000
client_result_cache_size                         big integer 0
result_cache_max_result                             integer        5
result_cache_max_size                                big integer 3168K
result_cache_mode                                     string          MANUAL
result_cache_remote_expiration                    integer        0
SQL>


例 2:显示哪些缓存参数可以用 ALTER SESSION 修改:

SQL> list
  1 select name,isses_modifiable from v$parameter where
  2* name like 'res%'

NAME                                                           ISSES
--------------------------------------------                   -----
resource_limit                                                 FALSE
resource_manager_cpu_allocation                                FALSE
resource_manager_plan                                          FALSE
resumable_timeout                                              TRUE
result_cache_mode                                              TRUE
result_cache_max_size                                          FALSE
result_cache_max_result                                        FALSE
result_cache_remote_expiration                                 TRUE

已选择 8 行。
如果 isses_modifiable 列的值为 TRUE,表示可用 ALTER SESSION 修改。

例 3:修改缓存参数:

连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL>
SQL> ALTER SYSTEM SET result_cache_max_size = 20M SCOPE = MEMORY;

System altered.

SQL> SELECT name, value
  2 FROM v$parameter
  3 WHERE name = 'result_cache_max_size';



§1.3.2 缓存的监控
对于 Oracle 11g 服务器结果缓存来说,Oracle 系统提供下面参数供 DBA 调整:

       视图                          描述
       V$RESULT_CACHE_STATISTICS   罗列出各种缓存设置和内存使用统计数据。
       V$RESULT_CACHE_MEMORY       列出所有的内存块和相应的统计信息。
       V$RESULT_CACHE_OBJECTS      列出所有的对象(缓存的结果和依赖的对象)和它们的属
                                   性。
       V$RESULT_CACHE_DEPENDEN     列出缓存的结果和依赖对象间的依赖详情。
       CY


例 1:查询 v$result_cache_statistics 视图缓存信息:


SQL> column name format a20
SQL> select name, value from v$result_cache_statistics;


NAME                             VALUE
---------------------------- ----------
Block Size (Bytes)                  1024
Block Count Maximum                 3136
Block Count Current                  32
Result Size Maximum (Blocks)             156
Create Count Success                     2
Create Count Failure                     0
Find Count                           0
Invalidation Count                       0
Delete Count Invalid                     0
Delete Count Valid                       0


例 2:查询缓存情况统计视图:
--查询 v$result_cache_statistics 视图缓存信息


SQL> column name format a20
SQL> select name, value from v$result_cache_statistics;


NAME                           VALUE
---------------------------- ----------
Block Size (Bytes)                1024
Block Count Maximum               3136
Block Count Current                32
Result Size Maximum (Blocks)           156
Create Count Success                   2
Create Count Failure                   0
Find Count                         0
Invalidation Count                     0
Delete Count Invalid                   0
Delete Count Valid                     0




§1.4 小结
   Oracle 系统提供的缓存可实现将查询结果缓存在内存里,但是,任何事情
都具有两面性,对于服务器缓存结果集来说,主要控制整个 Oracle 缓存数据的
量,即合理的将哪些使用重复频率高的数据是无可非议的。如果数据结构缓存功
能被过分使用,会导致整个数据库服务器的内存减少,最后可能走向反面。所以
建议 DBA 经常监控这样的功能的使用是否出现过度现象。

Mais conteúdo relacionado

Mais procurados

配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制maclean liu
 
Mysql性能分析之临时表(共享)
Mysql性能分析之临时表(共享)Mysql性能分析之临时表(共享)
Mysql性能分析之临时表(共享)beiyu95
 
MySQL 6.0 下的cluster + replicate - 20080220
MySQL 6.0 下的cluster + replicate - 20080220MySQL 6.0 下的cluster + replicate - 20080220
MySQL 6.0 下的cluster + replicate - 20080220Jinrong Ye
 
TomCat迁移步骤简述以及案例
TomCat迁移步骤简述以及案例TomCat迁移步骤简述以及案例
TomCat迁移步骤简述以及案例maclean liu
 
Mysql企业备份发展及实践
Mysql企业备份发展及实践Mysql企业备份发展及实践
Mysql企业备份发展及实践maclean liu
 
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410maclean liu
 
【Maclean liu技术分享】深入理解oracle中mutex的内部原理
【Maclean liu技术分享】深入理解oracle中mutex的内部原理【Maclean liu技术分享】深入理解oracle中mutex的内部原理
【Maclean liu技术分享】深入理解oracle中mutex的内部原理maclean liu
 
Oracle 資料庫檔案介紹
Oracle 資料庫檔案介紹Oracle 資料庫檔案介紹
Oracle 資料庫檔案介紹Chien Chung Shen
 
Sql调优clustering factor影响数据删除速度一例
Sql调优clustering factor影响数据删除速度一例Sql调优clustering factor影响数据删除速度一例
Sql调优clustering factor影响数据删除速度一例maclean liu
 
10, OCP - flashback
10, OCP - flashback10, OCP - flashback
10, OCP - flashbackted-xu
 
【Ask maclean技术分享】oracle dba技能列表 z
【Ask maclean技术分享】oracle dba技能列表 z【Ask maclean技术分享】oracle dba技能列表 z
【Ask maclean技术分享】oracle dba技能列表 zmaclean liu
 
Mysql handlersocket
Mysql handlersocketMysql handlersocket
Mysql handlersocketpwesh
 
了解Oracle在线重定义online redefinition
了解Oracle在线重定义online redefinition了解Oracle在线重定义online redefinition
了解Oracle在线重定义online redefinitionmaclean liu
 
A.oracle 数据字典与脚本初步
A.oracle 数据字典与脚本初步A.oracle 数据字典与脚本初步
A.oracle 数据字典与脚本初步WASecurity
 
Oracle Data Buffer Cache
Oracle Data Buffer CacheOracle Data Buffer Cache
Oracle Data Buffer CacheSky Jian
 
浅谈 My sql 性能调优
浅谈 My sql 性能调优浅谈 My sql 性能调优
浅谈 My sql 性能调优thinkinlamp
 
dbdao.com 汪伟华 my-sql-replication复制高可用配置方案
dbdao.com 汪伟华 my-sql-replication复制高可用配置方案dbdao.com 汪伟华 my-sql-replication复制高可用配置方案
dbdao.com 汪伟华 my-sql-replication复制高可用配置方案maclean liu
 
Oracle管理藝術第1章 在Linux作業體統安裝Oracle 11g
Oracle管理藝術第1章 在Linux作業體統安裝Oracle 11gOracle管理藝術第1章 在Linux作業體統安裝Oracle 11g
Oracle管理藝術第1章 在Linux作業體統安裝Oracle 11gChien Chung Shen
 

Mais procurados (20)

配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制
 
Mysql性能分析之临时表(共享)
Mysql性能分析之临时表(共享)Mysql性能分析之临时表(共享)
Mysql性能分析之临时表(共享)
 
MySQL 6.0 下的cluster + replicate - 20080220
MySQL 6.0 下的cluster + replicate - 20080220MySQL 6.0 下的cluster + replicate - 20080220
MySQL 6.0 下的cluster + replicate - 20080220
 
TomCat迁移步骤简述以及案例
TomCat迁移步骤简述以及案例TomCat迁移步骤简述以及案例
TomCat迁移步骤简述以及案例
 
Mysql企业备份发展及实践
Mysql企业备份发展及实践Mysql企业备份发展及实践
Mysql企业备份发展及实践
 
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
 
【Maclean liu技术分享】深入理解oracle中mutex的内部原理
【Maclean liu技术分享】深入理解oracle中mutex的内部原理【Maclean liu技术分享】深入理解oracle中mutex的内部原理
【Maclean liu技术分享】深入理解oracle中mutex的内部原理
 
Oracle 資料庫檔案介紹
Oracle 資料庫檔案介紹Oracle 資料庫檔案介紹
Oracle 資料庫檔案介紹
 
Oracle 資料庫建立
Oracle 資料庫建立Oracle 資料庫建立
Oracle 資料庫建立
 
Sql调优clustering factor影响数据删除速度一例
Sql调优clustering factor影响数据删除速度一例Sql调优clustering factor影响数据删除速度一例
Sql调优clustering factor影响数据删除速度一例
 
10, OCP - flashback
10, OCP - flashback10, OCP - flashback
10, OCP - flashback
 
【Ask maclean技术分享】oracle dba技能列表 z
【Ask maclean技术分享】oracle dba技能列表 z【Ask maclean技术分享】oracle dba技能列表 z
【Ask maclean技术分享】oracle dba技能列表 z
 
Mysql handlersocket
Mysql handlersocketMysql handlersocket
Mysql handlersocket
 
Mysql集群
Mysql集群Mysql集群
Mysql集群
 
了解Oracle在线重定义online redefinition
了解Oracle在线重定义online redefinition了解Oracle在线重定义online redefinition
了解Oracle在线重定义online redefinition
 
A.oracle 数据字典与脚本初步
A.oracle 数据字典与脚本初步A.oracle 数据字典与脚本初步
A.oracle 数据字典与脚本初步
 
Oracle Data Buffer Cache
Oracle Data Buffer CacheOracle Data Buffer Cache
Oracle Data Buffer Cache
 
浅谈 My sql 性能调优
浅谈 My sql 性能调优浅谈 My sql 性能调优
浅谈 My sql 性能调优
 
dbdao.com 汪伟华 my-sql-replication复制高可用配置方案
dbdao.com 汪伟华 my-sql-replication复制高可用配置方案dbdao.com 汪伟华 my-sql-replication复制高可用配置方案
dbdao.com 汪伟华 my-sql-replication复制高可用配置方案
 
Oracle管理藝術第1章 在Linux作業體統安裝Oracle 11g
Oracle管理藝術第1章 在Linux作業體統安裝Oracle 11gOracle管理藝術第1章 在Linux作業體統安裝Oracle 11g
Oracle管理藝術第1章 在Linux作業體統安裝Oracle 11g
 

Destaque

企业安全应急响应与渗透反击V0.04(程冲)
企业安全应急响应与渗透反击V0.04(程冲)企业安全应急响应与渗透反击V0.04(程冲)
企业安全应急响应与渗透反击V0.04(程冲)WASecurity
 
一次详细的渗透Wordpress教程
一次详细的渗透Wordpress教程一次详细的渗透Wordpress教程
一次详细的渗透Wordpress教程WASecurity
 
IT Vulnerability & Tools Watch 2011
IT Vulnerability & Tools Watch 2011IT Vulnerability & Tools Watch 2011
IT Vulnerability & Tools Watch 2011WASecurity
 
Oracle DBA Competency Roadmap
Oracle DBA Competency RoadmapOracle DBA Competency Roadmap
Oracle DBA Competency RoadmapMahesh Vallampati
 
Oracle Database Management - Backup/Recovery
Oracle Database Management - Backup/RecoveryOracle Database Management - Backup/Recovery
Oracle Database Management - Backup/RecoveryChien Chung Shen
 

Destaque (6)

企业安全应急响应与渗透反击V0.04(程冲)
企业安全应急响应与渗透反击V0.04(程冲)企业安全应急响应与渗透反击V0.04(程冲)
企业安全应急响应与渗透反击V0.04(程冲)
 
一次详细的渗透Wordpress教程
一次详细的渗透Wordpress教程一次详细的渗透Wordpress教程
一次详细的渗透Wordpress教程
 
IT Vulnerability & Tools Watch 2011
IT Vulnerability & Tools Watch 2011IT Vulnerability & Tools Watch 2011
IT Vulnerability & Tools Watch 2011
 
Why use MySQL
Why use MySQLWhy use MySQL
Why use MySQL
 
Oracle DBA Competency Roadmap
Oracle DBA Competency RoadmapOracle DBA Competency Roadmap
Oracle DBA Competency Roadmap
 
Oracle Database Management - Backup/Recovery
Oracle Database Management - Backup/RecoveryOracle Database Management - Backup/Recovery
Oracle Database Management - Backup/Recovery
 

Semelhante a A.oracle 查询结果的缓存问题

11, OCP - awr & alert system
11, OCP - awr & alert system11, OCP - awr & alert system
11, OCP - awr & alert systemted-xu
 
数据库性能诊断的七种武器
数据库性能诊断的七种武器数据库性能诊断的七种武器
数据库性能诊断的七种武器Leyi (Kamus) Zhang
 
12, OCP - performance tuning
12, OCP - performance tuning12, OCP - performance tuning
12, OCP - performance tuningted-xu
 
11g r2新特性之standby max_data_delay
11g r2新特性之standby max_data_delay11g r2新特性之standby max_data_delay
11g r2新特性之standby max_data_delaymaclean liu
 
Oracle数据库体系结构简介.ppt
Oracle数据库体系结构简介.pptOracle数据库体系结构简介.ppt
Oracle数据库体系结构简介.pptjames tong
 
Csdn Emag(Oracle)第二期
Csdn Emag(Oracle)第二期Csdn Emag(Oracle)第二期
Csdn Emag(Oracle)第二期yiditushe
 
Oracle数据库升级前必要的准备工作
Oracle数据库升级前必要的准备工作Oracle数据库升级前必要的准备工作
Oracle数据库升级前必要的准备工作maclean liu
 
Itpub电子杂志(第五期)
Itpub电子杂志(第五期)Itpub电子杂志(第五期)
Itpub电子杂志(第五期)yiditushe
 
5, OCP - oracle storage
5, OCP - oracle storage5, OCP - oracle storage
5, OCP - oracle storageted-xu
 
Mybatis学习培训
Mybatis学习培训Mybatis学习培训
Mybatis学习培训flynofry
 
手机之家的数据访问层实践
手机之家的数据访问层实践手机之家的数据访问层实践
手机之家的数据访问层实践guestf5121c
 
手机之家的数据访问层实践
手机之家的数据访问层实践手机之家的数据访问层实践
手机之家的数据访问层实践xcq
 
1号店数据库架构
1号店数据库架构1号店数据库架构
1号店数据库架构Louis liu
 
Altibase管理培训 安装篇
Altibase管理培训 安装篇Altibase管理培训 安装篇
Altibase管理培训 安装篇小新 制造
 
【Ask maclean技术分享oracle数据库优化】awr鹰眼系列awr报告全面指标分析
【Ask maclean技术分享oracle数据库优化】awr鹰眼系列awr报告全面指标分析【Ask maclean技术分享oracle数据库优化】awr鹰眼系列awr报告全面指标分析
【Ask maclean技术分享oracle数据库优化】awr鹰眼系列awr报告全面指标分析maclean liu
 
Memcached内存分析、调优、集群
Memcached内存分析、调优、集群Memcached内存分析、调优、集群
Memcached内存分析、调优、集群hik_lhz
 
1.oracle 11g 用户管理新功能
1.oracle 11g 用户管理新功能1.oracle 11g 用户管理新功能
1.oracle 11g 用户管理新功能WASecurity
 
高性能LAMP程序设计
高性能LAMP程序设计高性能LAMP程序设计
高性能LAMP程序设计fuchaoqun
 
一次Web性能测试小结
一次Web性能测试小结一次Web性能测试小结
一次Web性能测试小结beiyu95
 
Lamp优化实践
Lamp优化实践Lamp优化实践
Lamp优化实践zhliji2
 

Semelhante a A.oracle 查询结果的缓存问题 (20)

11, OCP - awr & alert system
11, OCP - awr & alert system11, OCP - awr & alert system
11, OCP - awr & alert system
 
数据库性能诊断的七种武器
数据库性能诊断的七种武器数据库性能诊断的七种武器
数据库性能诊断的七种武器
 
12, OCP - performance tuning
12, OCP - performance tuning12, OCP - performance tuning
12, OCP - performance tuning
 
11g r2新特性之standby max_data_delay
11g r2新特性之standby max_data_delay11g r2新特性之standby max_data_delay
11g r2新特性之standby max_data_delay
 
Oracle数据库体系结构简介.ppt
Oracle数据库体系结构简介.pptOracle数据库体系结构简介.ppt
Oracle数据库体系结构简介.ppt
 
Csdn Emag(Oracle)第二期
Csdn Emag(Oracle)第二期Csdn Emag(Oracle)第二期
Csdn Emag(Oracle)第二期
 
Oracle数据库升级前必要的准备工作
Oracle数据库升级前必要的准备工作Oracle数据库升级前必要的准备工作
Oracle数据库升级前必要的准备工作
 
Itpub电子杂志(第五期)
Itpub电子杂志(第五期)Itpub电子杂志(第五期)
Itpub电子杂志(第五期)
 
5, OCP - oracle storage
5, OCP - oracle storage5, OCP - oracle storage
5, OCP - oracle storage
 
Mybatis学习培训
Mybatis学习培训Mybatis学习培训
Mybatis学习培训
 
手机之家的数据访问层实践
手机之家的数据访问层实践手机之家的数据访问层实践
手机之家的数据访问层实践
 
手机之家的数据访问层实践
手机之家的数据访问层实践手机之家的数据访问层实践
手机之家的数据访问层实践
 
1号店数据库架构
1号店数据库架构1号店数据库架构
1号店数据库架构
 
Altibase管理培训 安装篇
Altibase管理培训 安装篇Altibase管理培训 安装篇
Altibase管理培训 安装篇
 
【Ask maclean技术分享oracle数据库优化】awr鹰眼系列awr报告全面指标分析
【Ask maclean技术分享oracle数据库优化】awr鹰眼系列awr报告全面指标分析【Ask maclean技术分享oracle数据库优化】awr鹰眼系列awr报告全面指标分析
【Ask maclean技术分享oracle数据库优化】awr鹰眼系列awr报告全面指标分析
 
Memcached内存分析、调优、集群
Memcached内存分析、调优、集群Memcached内存分析、调优、集群
Memcached内存分析、调优、集群
 
1.oracle 11g 用户管理新功能
1.oracle 11g 用户管理新功能1.oracle 11g 用户管理新功能
1.oracle 11g 用户管理新功能
 
高性能LAMP程序设计
高性能LAMP程序设计高性能LAMP程序设计
高性能LAMP程序设计
 
一次Web性能测试小结
一次Web性能测试小结一次Web性能测试小结
一次Web性能测试小结
 
Lamp优化实践
Lamp优化实践Lamp优化实践
Lamp优化实践
 

A.oracle 查询结果的缓存问题

  • 1. §1 Oracle 查询数据缓存问题 关键字:Oracle、SQL Query Result Cache 、DBMS_RESULT_CACHE 读者级别:中级 作者:赵元杰 概要:虽然现在的存储的容量每年以倍数增长,但是,存储子系统的 I/O 速度并没有像它的容量那样令人满意, 这样的原因导致对大数据量表进行读取时 消耗较长 I/O 时间,而当数据被读到内存后不能持续保存在内存里,以至于我们再 次需要这些数据时,不得不重新从磁盘中读取,导至多次重复读取相同的数据。 这里介绍基于 Oracle 11g 版本的缓存数据的方法,可解决这个问题。 §1.1 将查询结果缓存在内存很重要吗 ? 使用过 Oracle 系统的技术人员都知道,如果一个应用系统在查询过程中, 过多的物理读就意味着应用处理的效率很低。导致大量的物理读的主要原因是 Oracle 系统在搜索需要的数据块时,在内存无法找到而必须从数据文件读取。如 果,处理需要的数据块能在内存找到,当然就省去了物理 I/O 的处理。从而减少 整个应用的处理总时间了。 §1.2 11g 版本结果缓存的新功能 对于 Oracle 11g 版本来说,有许多弥补过去旧版本的不足的功能,比如我 们关心的结果缓存的问题,Oracle 11g 版本可实现在服务器端的结果缓存和客户 端的结果的缓存。对于用户来说,最为关心的莫过于服务器端的缓存了。 服务端的缓存可使用两种方法来实现使用, 一个是在查询语句中加提示(/*+ result_cache */ )的方法;另外一个是通过内置包(DBMS_RESULT_CACHE)的方 法。下面是这两种方法使用介绍: §1.2.1 使用 RESULT_CACHE 提示实现结果缓存 对于编程人员来说, 采用 Oracle 系统的 SQL 语句提示可谓是最方便,Oracle 11g 提供 RESULT_CACHE(使用结果缓存)/NO_RESULT_CACHE(不使用结果缓 存)来实现提示 --Oracle11g 版本:
  • 2. SELECT /*+ result_cache */ state, sum(order_total) FROM order_history WHERE order_date BETWEEN ’1-JAN-09’ AND ’1-JAN-10’ GROUP BY state; §1.2.2 关于 NO_RESULT_CACHE 提示 如果使用结果缓存功能,Oracle 系统会将数据结构存放在共享池内,如果 Oracle 服务器的内存比较小,而某些表已经采用了 Alter Table <table_name> result_cache 的话,会出现只有查询这个<table_name>表,Oracle 会自动启用数 据结构缓存方法,这样回答内存被大量结果缓存所占用,所以,可采用 NO_RESULT_CACHE 来实现不使用结果缓存的提示 --Oracle11g 版本: SELECT /*+ NO_RESULT_CACHE */ prod_id, SUM(amount_sold) FROM sales GROUP BY prod_id ORDER BY prod_id; §1.2.3 DBMS_RESULT_CACHE 包的使用 DBMS_RESULT_CACHE 可实现在 PL/SQL 中编程使用。这个包有下面的程序: 存储过程 功能 FLUSH 清除整个结果缓存的内容 MEMORY_REPORT 列出结果缓存内存利用的一个概要(默认)或详细的报表。 INVALIDATE 使结果缓存中一个特定对象的缓存结果无效 INVALIDATE_OBJECT 根据缓存 ID 使一特定结果缓存无效 返回结果缓存的当前状态。值包括: ENABLED:结果缓存是激活的 STATUS DISABLED:结果缓存是不可用的 BYPASSED:结果缓存暂时不可用 SYNC:结果缓存是可用的,但是目前正与其他 RAC 节点重新同步 下面例子表示绕过缓存的机制功能: --Oracle11g 版本: SQL> execute dbms_result_cache.bypass(bypass_mode => TRUE, session => TRUE); PL/SQL procedure successfully completed 下面例子列出目前内存中缓存的情况信息:
  • 3. --Oracle 11g 版本: EXECUTE 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 = 1024 bytes Maximum Cache Size = 950272 bytes (928 blocks) Maximum Result Size = 47104 bytes (46 blocks) [Memory] Total Memory = 46340 bytes [0.048% of the Shared Pool] ... Fixed Memory = 10696 bytes [0.011% of the Shared Pool] ... State Object Pool = 2852 bytes [0.003% of the Shared Pool] ... Cache Memory = 32792 bytes (32 blocks) [0.034% of the Shared Pool] ....... Unused Memory = 30 blocks ....... Used Memory = 2 blocks ........... Dependencies = 1 blocks ........... Results = 1 blocks ............... SQL = 1 blocks PL/SQL procedure successfully completed. §1.3 结果缓存的管理与监控 §1.3.1 有关缓存参数与调整 对于 Oracle 11g 服务器结果缓存来说,Oracle 系统提供下面参数供 DBA 调整: 1.RESULT_CACHE_MODE 参数: 这个参数的可能值为:  MANUAL (default) – 查询提示或表注释  FORCE – 每个结果都缓存(不推荐)  AUTO– 更多的选择 2.RESULT_CACHE_MAX_SIZE 参数: 这个参数表示使用结果缓存的最大值,可能为:  分配给 server result cache 的总数  0 (Disabled), 0.25% (memory_target), 0.5% (sga_target) 及 ~1% (shared_pool_size) 3.RESULT_CACHE_MAX_RESULT 参数: 这个参数的含义是:  分配给单个结果集的总数  5% (Default)
  • 4. 例 1:显示当前缓存有关的参数: 连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> show parameter RESULT_CACHE NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ client_result_cache_lag big integer 3000 client_result_cache_size big integer 0 result_cache_max_result integer 5 result_cache_max_size big integer 3168K result_cache_mode string MANUAL result_cache_remote_expiration integer 0 SQL> 例 2:显示哪些缓存参数可以用 ALTER SESSION 修改: SQL> list 1 select name,isses_modifiable from v$parameter where 2* name like 'res%' NAME ISSES -------------------------------------------- ----- resource_limit FALSE resource_manager_cpu_allocation FALSE resource_manager_plan FALSE resumable_timeout TRUE result_cache_mode TRUE result_cache_max_size FALSE result_cache_max_result FALSE result_cache_remote_expiration TRUE 已选择 8 行。 如果 isses_modifiable 列的值为 TRUE,表示可用 ALTER SESSION 修改。 例 3:修改缓存参数: 连接到:
  • 5. Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> SQL> ALTER SYSTEM SET result_cache_max_size = 20M SCOPE = MEMORY; System altered. SQL> SELECT name, value 2 FROM v$parameter 3 WHERE name = 'result_cache_max_size'; §1.3.2 缓存的监控 对于 Oracle 11g 服务器结果缓存来说,Oracle 系统提供下面参数供 DBA 调整: 视图 描述 V$RESULT_CACHE_STATISTICS 罗列出各种缓存设置和内存使用统计数据。 V$RESULT_CACHE_MEMORY 列出所有的内存块和相应的统计信息。 V$RESULT_CACHE_OBJECTS 列出所有的对象(缓存的结果和依赖的对象)和它们的属 性。 V$RESULT_CACHE_DEPENDEN 列出缓存的结果和依赖对象间的依赖详情。 CY 例 1:查询 v$result_cache_statistics 视图缓存信息: SQL> column name format a20 SQL> select name, value from v$result_cache_statistics; NAME VALUE ---------------------------- ---------- Block Size (Bytes) 1024 Block Count Maximum 3136 Block Count Current 32 Result Size Maximum (Blocks) 156 Create Count Success 2 Create Count Failure 0 Find Count 0 Invalidation Count 0 Delete Count Invalid 0 Delete Count Valid 0 例 2:查询缓存情况统计视图:
  • 6. --查询 v$result_cache_statistics 视图缓存信息 SQL> column name format a20 SQL> select name, value from v$result_cache_statistics; NAME VALUE ---------------------------- ---------- Block Size (Bytes) 1024 Block Count Maximum 3136 Block Count Current 32 Result Size Maximum (Blocks) 156 Create Count Success 2 Create Count Failure 0 Find Count 0 Invalidation Count 0 Delete Count Invalid 0 Delete Count Valid 0 §1.4 小结 Oracle 系统提供的缓存可实现将查询结果缓存在内存里,但是,任何事情 都具有两面性,对于服务器缓存结果集来说,主要控制整个 Oracle 缓存数据的 量,即合理的将哪些使用重复频率高的数据是无可非议的。如果数据结构缓存功 能被过分使用,会导致整个数据库服务器的内存减少,最后可能走向反面。所以 建议 DBA 经常监控这样的功能的使用是否出现过度现象。