oracle数据库的缓存设置

Oracle缓存由两个参数控制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 复制代码
SQL>ALTER SYSTEM SET sga_max_size=4g scope=spfile;

2、重启Oracle

3、设置参数sga_target和pga_aggregate_target,

sql 复制代码
  alter system set sga_target=4G;
  alter system set pga_aggregate_target=1g;

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

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

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

数据访问是什么样的访问,你的系统是OLAP还是OLTP,这些应用上的东西对你的决定也有影响的,要谨记,数据库的优化和维护,不仅仅是DBA来做的。如果是到了只能通过DBA来做这一步的话,就相当于看病已经到了拿手术刀这一步了。 你的改变带来的风险和代价最高。

要想减少磁盘读,只能增大内存的使用.楼主可以看看这个视图v$db_cache_size,并执行下面的查询:

sql 复制代码
select block_size, size_for_estimate, size_factor, estd_physical_read_factor, estd_physical_reads from v$db_cache_advice;

Oracle在这个视图中针对db_cache_size的大小会给出一些建议。

下面解释几个列的含义
size_for_estimate:估计的cache size大小
size_factor: 估计的cache size大小与当前大小的比值
estd_physical_reads:在估计的cache size大小情况下,会产生的物理读数量
estd_physical_read_factor:估计的物理读数量与当前物理读数量的比值。

例子:

SIZE_FOR_ESTIMATE | SIZE_FACTOR | ESTD_PHYSICAL_READ_FACTOR | ESTD_PHYSICAL_READS
20 0.0893 6.1454 270840
40 0.1786 3.0632 135003
60 0.2679 2.4908 109775
80 0.3571 2.1411 94362
100 0.4464 1.9619 86464
120 0.5357 1.8235 80366
140 0.625 1.6081 70873
160 0.7143 1.5038 66275
180 0.8036 1.3957 61510
200 0.8929 1.1541 50861
220 0.9821 1.0089 44465
224 1 1 44072
240 1.0714 0.8524 37568
260 1.1607 0.8184 36068
280 1.25 0.7965 35103
300 1.3393 0.793 34948
320 1.4286 0.7908 34853
340 1.5179 0.7905 34841
360 1.6071 0.7905 34841
380 1.6964 0.7905 34841
400 1.7857 0.7873 34698

从上面的数据中可以看到,当前db_cache_size为224M,其物理读为44072,增加cache size大小会减少物理读,当cache size到340M时,物理读的减少不再明显,因此db_cache_size大小为340M在目前情况下是一个合适的值。
由于这里用的是自动共享内存管理方式,应该增加sga_target,这样db_cache_size大小会相应增加,要增加sga_target要先增加sga_max_size。

相关推荐
vvvae12348 小时前
分布式数据库
数据库
雪域迷影8 小时前
PostgreSQL Docker Error – 5432: 地址已被占用
数据库·docker·postgresql
bug菌¹9 小时前
滚雪球学Oracle[4.2讲]:PL/SQL基础语法
数据库·oracle
逸巽散人9 小时前
SQL基础教程
数据库·sql·oracle
月空MoonSky9 小时前
Oracle中TRUNC()函数详解
数据库·sql·oracle
momo小菜pa9 小时前
【MySQL 06】表的增删查改
数据库·mysql
向上的车轮10 小时前
Django学习笔记二:数据库操作详解
数据库·django
编程老船长10 小时前
第26章 Java操作Mongodb实现数据持久化
数据库·后端·mongodb
全栈师11 小时前
SQL Server中关于个性化需求批量删除表的做法
数据库·oracle
Data 31711 小时前
Hive数仓操作(十七)
大数据·数据库·数据仓库·hive·hadoop