oracle 查询缓存是否开启,数据库强制的开启全库缓存模式

在以前的版本当中, oracle数据库不能将用户查询的大表数据缓存到buffer cache当中, 因为缓存大表的时候会将数据库中有用的数据从内存中给置换出来, 这样的就不能提高数据库的效率了。

但是从12.1.0.2版本开始,如果数据库的实例的内存足够大,大到可以讲数据库所有的数据都能够缓存所有的数据库的数据的情况时,数据库开启全库缓存,这样数据库将所有的数据缓存到buffer cache当中。 将所有的数据都缓存到内存当中的时候,可以提高数据库的性能。

可以通过下面的步骤将数据库开启全库缓存模式。

ALTER DATABASE FORCE FULL DATABASE CACHING;

该命令必须在数据库启动到mount状态时,执行。

同时在关闭数据库,启动到mount状态时,最好先触发checkpoint然后正常的关闭数据库。

在开启上述的模式的情况下, 数据库认为内存已经可以满足将数据库上的所有的数据都缓存到buffer cache上了。

可以通过下面的命令查询数据库是否开启了强制全库缓存模式

Select  force_full_db_caching from v$database;

开启全库缓存模式下关于大字段缓存问题

在默认的数据库缓存模式下,Nocache lobs这样的大字段类型是不能被缓存到buffer cache当中的。 但是开启全库缓存模式的情况下, nocache lobs这样的大字段也是可以缓存到buffer  cache当中。 同理 其他类型的lob字段不管是普通的还是 securefiles lob还是basicfiles

lob都是可以缓存到buffer cache当中的。

我们知道普通情况下,buffer cache当中的数据是只要读才能缓存到数据库的buffer cache当中, 其实全库缓存模式下仍然是相同的。 只有访问的数据才可以缓存到buffer cache。

在多租户的环境当中force full database会适用于cdb和所有的pdb当中。

关于全库强制缓存的信息存储在控制文件当中, 如果控制文件损坏然后重建的话, 那么可能会造成全库强制缓存模式丢失。

开启全库强制缓存的前提条件

1 数据库版本12.2

2 buffer cache 的大小足够将数据库中的数据整体缓存

当使用sga_target或者是使用memory_target的时候buffer cache使用的是自动内存管理,

其大小根据负载进行自动的调整 。 通过下面的语句可以查询估算的buffer cache的大小。

SELECT NAME, BYTES

FROM V$SGAINFO WHERE NAME='Buffer Cache Size';

如果你想要估算数据库的buffer cache的需求的时候,可以使用下面的方式进行估算

Buffer cache =60%*

sga_target

Sga_target=60% *

memory_target

启动和关闭数据库的强制数据库缓存

1 登录拥有alter database用户

2 启动数据库到mount状态

3 ALTER DATABASE FORCE FULL DATABASE CACHING;

4 alter database open;

关闭

2 启动数据库到mount状态

ALTER DATABASE NO FORCE FULL DATABASE CACHING;

4 alter database open;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值