`

oracle 缓存表

阅读更多
oracle的db_buffer_pool由三部分组成:

buffer_pool_defualt

buffer_pool_keep

buffer_pool_recycle

如果要把表钉死在内存中,也就是把表钉在keep区。

相关的命令为:

alter table ..... storage(buffer_pool keep);

这句命令把表示表如果缓存的话是缓存在keep区。

可以通过语句:

select table_name from dba_tables where buffer_pool='KEEP';查询到改表是放在keep区中的。

但是不意味着表已经被缓存了。

下面的语句把表缓存:

alter table .... cache;

可以通过

select table_name from dba_ tables where rtrim(cache)='Y'

查询到该表已经被缓存了。

加入到keep区的表不是说不能被移出内存,不过是比较不容易移出内存。

也可以手工来移出内存,命令如下:

alter table ... nocache;


oracle实例的default,keep,recycle池的理解--**************************************************************************
--***
--***关于DB中各种数据缓冲池大小
--***
--**************************************************************************
SQL> SHOW PARAMETER CACHE

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_cache_size big integer 25165824
db_keep_cache_size big integer 0
db_recycle_cache_size big integer 0

--**************************************************************************
--***
--***查询数据字典V$BUFFER_POOL,本处只有DEFAULT池,为24M
--***
--**************************************************************************
Select * From V$BUFFER_POOL;
ID 3
NAME DEFAULT
BLOCK_SIZE 8192
RESIZE_STATE STATIC
CURRENT_SIZE 24
BUFFERS 3000
TARGET_SIZE 24
TARGET_BUFFERS 3000
PREV_SIZE 0
PREV_BUFFERS 0
LO_BNUM 0
HI_BNUM 0
LO_SETID 3
HI_SETID 3
SET_COUNT 1
--**************************************************************************
--***
--***更改KEEP池,为10M,并重新启动数据库
--***
--**************************************************************************
SQL> ALTER SYSTEM SET db_keep_cache_size=10m SCOPE=SPFILE;

系统已更改。

SQL> SHUTDOWN IMMEDIATE;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> STARTUP ;
ORACLE 例程已经启动。

Total System Global Area 147921840 bytes
Fixed Size 453552 bytes
Variable Size 109051904 bytes
Database Buffers 37748736 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
数据库已经打开。
--**************************************************************************
--***
--***重新启动数据库后,发现DB_CACHE_SIZE=24M,KEEP池为12M,同时查询数据字典BUFFER
--***发现DEFAUL=24M,KEEP=12M.可以得出结论,KEEP是通过db_keep_cache_size参数设置,根
--***DB_CACHE_SIZE无关。实际上DB_CACHE_SIZE是设置DEFAULT的
--***
--**************************************************************************
SQL> SHOW PARAMETER CACHE;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------

db_cache_size big integer 25165824
db_keep_cache_size big integer 12582912

Select * From V$BUFFER_POOL;
ID NAME BLOCK_SIZE RESIZE_STATE CURRENT_SIZE
1 KEEP 8192 STATIC 12
3 DEFAULT 8192 STATIC 24
DB BUFFERS表示总的缓冲区大小
它分为三部分(不包括不同块大小的缓冲区),一部分是DEFAULT,一部分是KEEP池,一部分是RECYCLE池。
在你设置KEEP,RECYCLE池:你全表扫描的时候,数据被放入到DEFAULT的LRU列表的LRU端。如果你使用了ALTER TABLE CACHE,则表被放入到LRU列表的MRU端
如果你设置了KEEP,RECYCLE池:并且使用了alter table *** storage(buffer_pool keep);表被放入到指定的池中。 





Oracle Keep池

--Keep池
--创建时把人员表标记为 keep
create table staff(login varchar2(10),name varchar2(20))
storage (buffer_pool keep);
--修改表改存到recycle 回收池
alter table staff storage ( buffer_pool recycle );

--修改表改存到keep 回收池
alter table staff storage ( buffer_pool keep );

---查看Keep 池中的磁盘和内存读取情况
select 
physical_reads Disk_Reads,
db_block_gets + consistent_gets MemoryReads
from v$buffer_pool_statistics
where name ='KEEP'
 



设置缓存表
缓存由两个参数控制SGA_TARGET和PGA_AGGREGATE_TARGET,设置了这两个参数,其他的基本内存部分都由Oracle自动配置为最优值,这也是Oracle推荐的方式。

SGA_TARGET和PGA_AGGREGATE_TARGET是动态参数,可以在不重启数据库的情况下修改。但是SGA_TARGET受限于sga_max_size,SGA_TARGET不能超过sga_max_size,所以要增大sga_target先要增大sga_max_size,而sga_max_size是静态参数,修改sga_max_size必须重启Oracle。

所以修改sga_target和pga_aggregate_target的过程如下:

1、修改sga_max_size

SQL>ALTER SYSTEM SET sga_max_size=4g scope=spfile;

2、重启Oracle

3、设置参数sga_target和pga_aggregate_target,

  alter system set sga_target=4G;
  alter system set pga_aggregate_target=1g; 

如果是oracle10g
已经是ASSM, oracle会根据统计的信息,自动的来调整你的内存组件的大小,你只需要设置sga_target即可。当然你可以手动设置db_cache_size,如果设置了的话,Oracle会在自动调整内存大小的时候把这个作为db_cache_size的最小值。

对于sga_target,在动态修改的时候,最大值不能操过sga_max_size, 如果是 用scope=spfile这个方式来修改可以超过sga_max_size,应该此时sga_max_size也跟着变大了,如果超过的话。

2.
Oracle对数据库的cache有他自己的计算的,10g以后,内存是动态的根据对你使用系统的统计来进行调整的,如果出现问题,这块不是原因,你之所以db cache还没有上去,可能是访问的数据比较少,不过按3楼的,你加大db_cache_size的值,会保留这个内存空间的,但是也是一样的,数据load到内存里,才看得到变化。

分享到:
评论

相关推荐

    Oracle高性能SQL调整

    主要内容包括:理解SQL调整在Oracle总体微调中地地位,使用诸如内嵌视图和BIF扩展提高Oracle SQL性能,确定并报告程序库缓存中的SQL语句,调整SQL表访问、完整表扫描和平行查询,运行TKPROF获得SQL跟踪报告,使用...

    oracle动态性能表

    oracle动态性能表 学习动态性能表 第一篇--v$sysstat 2007.5.23  按照OracleDocument中的描述,v$sysstat存储自数据库实例运行那刻起就开始累计全实例(instance-wide)的资源使用情况。 类似于v$sesstat,该视图...

    Oracle 从入门到精通视频教程(11G版本)(ppt)

    第8章-游标,数据的缓存区 什么是游标 显示游标 隐式游标 第9章-视图,数据库中虚拟的表 什么是视图 视图的创建 操作视图数据的限制 视图的修改 视图的删除 第10章-存储过程,提高程序执行的效率 什么是...

    oracle10g课堂练习I(1)

    服务器进程和数据库缓冲区高速缓存 1-14 物理数据库结构 1-15 表空间和数据文件 1-17 SYSTEM 和 SYSAUX 表空间 1-18 段、区和块 1-19 逻辑和物理数据库结构 1-20 课程示例: HR 方案 1-22 数据库体系结构:...

    Oracle DBA workshop1 (中文版)

    服务器进程和数据库缓冲区高速缓存1-14 物理数据库结构1-15 表空间和数据文件1-17 SYSTEM 和SYSAUX 表空间1-18 段、区和块1-19 逻辑和物理数据库结构1-20 课程示例:HR 方案1-22 数据库体系结构:结构化组件概要1-23...

    Oracle SQL高级编程

    《Oracle SQL高级编程》:资深Oracle专家力作,OakTable团队推荐,全面、独到、翔实,题材丰富,Oracle开发人员和DBA必备。 媒体推荐 本书作者全部是OakTable的成员,且具有15-29年丰富的Oracle开发经验。在研究...

    ORACLE9i_优化设计与系统调整

    §1.6 块缓存(数据高速缓冲区) 33 §1.7 数据库写入进程 34 §1.8 日志写进程 34 §1.9 数据库检查点 34 §1.10 归档处理 35 §1.11 程序全局区(PGA) 35 第2章 警告日志与跟踪日志 35 §2.1 警告与日志文件 36 §...

    Oracle数据库管理员技术指南

    1.2.3 怎样配置符合 OFA 的 Oracle 文件 系统 1.3 规划数据库文件布局 1.3.1 最大化可用性的规划 1.3.2 最小化磁盘争用的规划 1.4 建立参数文件 1.4.1 配置参数的一些注意事项 1.4.2 建立参数文件的连接 ...

    如何用智能优化器提高Oracle的性能

    作为一个Oracle专业人员,你应该知道在SQL语句第一次进入库缓存时可能存在重大的启动延迟。但是聪明的Oracle DBA和开发人员能够改变表的搜索限制参数或者使用ordered提示来手工指定表的连接顺序,从而显著地减少优化...

    oracle数据库的优化

    oracle数据库的优化 数据库的优化 2 概述 2 监控数据库的性能: 2 优化数据库磁盘I/O 2 建立和优化数据库文件的方针: 6 ...管理表的动态分配。 15 避免链接行。 错误!未定义书签。 优化索引存储参数。

    Oracle Database 11g完全参考手册中文版.part1

    使用SQL重放、变更管理和缓存结果 使用闪回和自动撤消管理功能避免人为错误 构建和调整PL/SQL触发器、函数和程序包 使用Java、JDBC和XMIL开发数据库应用程序 使用Oracle实时应用群集(RAC)优化可用性和可扩展性

    Oracle自学(学习)材料 (共18章 偏理论一点)

    1 Oracle 结构组件 目标 1-2 基本结构概述 1-3 Oracle 服务器 1-4 Oracle 实例 1-5 建立连接和创建会话 1-6 Oracle 数据库 1-7 物理结构 1-8 内存结构 1-9 系统全局区(SGA) 1-10 共享池 1-12 库缓存 1-13 数据字典...

    高并发Oracle数据库系统的架构与设计

    , 全书主要内容从三个维度展开:首先是内部扩展的维度,深入探讨了高效B树索引、高效表设计、查询优化器等数据库架构设计与优化的核心技术,以及高并发Oracle数据库系统架构与设计的方法论和常见的高并发案例;...

    oracle 优化培训资料

    Oracle server 可以有条理的通过表空间以及段、扩展、数据块控制磁盘空间,表空间(Tablespaces):Oracle database 的数据存储在表空间中。 逻辑结构的层次如下所述: Oracle 数据库至少包含一个表空间。表空间包含...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    有近20年使用Oracle技术产品以及Oracle数据库管理员/Oracle数据库应用管理员的经验,是真正应用集群、性能调优以及数据库内部属性方面的专家。同时是一位演讲家及Oracle ACE。  JARED STILL 从1994年就开始使用...

    oracle高性能sql调整

    理解SQL调整在Oracle总体微调中地地位,使用诸如内嵌视图和BIF扩展提高Oracle SQL性能,确定并报告程式库缓存中的SQL语句,调整SQL表访问、完整表扫描和平行查询,运行TKPROF获得SQL跟踪报告,使用Oracle线索 ...

    oracle database 11g 高清完整中文版part2

     第47章 sql 结果缓存和客户端查询缓存  第48章 关于调整的示例分析  第49章 高级体系结构选项—— db保险库、内容db 和记录db  第50章 oracle 实时应用群集  第51章 数据库管理指南  第52章 oracle 中的xml ...

Global site tag (gtag.js) - Google Analytics