Force Full Database Caching Mode
意思就是可以把整个数据库缓存到内存中,当然你内存一定要非常大,起码要等于数据库的大小,才能容下整个数据库。
在RAC环境下,对于一个良好的分区应用,当要把所有实例的内存缓存结合到一起的时候可以使用,但是需要额外的一些空间去处理在实例之间的复制缓存块,所以内存的大小要大于数据库的大小。
1.数据库缓存类型
1.1在此之前还有一个默认的数据库缓存类型
Oracle数据库进行全表扫描时使用的默认数据库缓存模式。在默认缓存模式,Oracle数据库并不总是当用户查询一个大表,因为这样做可能会从缓冲区缓存中删除更多有用的数据缓存中的基础数据。
1)小表只有在表的大小小于内存的百分之二的情况下,才会被载入到内存。
2)对于中表,Oracle会分析上一次表扫描和缓存到内存的时间间隔。如果上一次扫描中表被重用的大小大于内存中保留的缓存大小,则表会被缓存。
3)对于大表,不会被加载到内存中,除非你手动声明KEEP到共享池中。
1.2.强制全数据库缓存类型-随着更多的内存被添加到数据库,缓存的大小也随着增大。在一些情况下,数据库甚至可以被全部缓存到内存中。当然这个可以大大提高数据库的性能。
在启用强制全数据库缓存,Oracle会缓存整个数据库到内存中,内存大小要足够大。所有的数据文件,包括NOCACHE的LOB,使用SecureFiles的LOB都会被加载到内存中。
2.1决定什么时候使用强制
1)The logical database size (or actual used space) is smaller than the individual buffer cache of each database instance in an Oracle RAC environment. This is applicable for non-Oracle RAC database as well.2)The logical database size is smaller than 80% of the combined buffer cache sizes of all the database instances for well-partitioned workloads (by instance access) in an Oracle RAC environment.3)The database uses SGA_TARGET or MEMORY_TARGET.4)The NOCACHE LOBs need to be cached. The NOCACHE LOBs are never cached unless force full database caching is used.
对于前三种情况,在启用全数据库缓存期间,要观察数据库的性能是否达到期望的性能。
对于RAC环境,必须所有实例同时启用全数据库缓存。
3.验证数据库缓存类型
默认情况下,数据库是在默认数据库缓存类型上运行
A)查看是否启用全数据库缓存
SELECT FORCE_FULL_DB_CACHING FROM V$DATABASE;
B)启用全数据库缓存
ALTER DATABASE FORCE FULL DATABASE CACHING;
转:http://www.cndba.cn/Expect-le/article/282