oracle数据库的缓存设置

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

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

SGA_TARGET 和PGA_AGGREGATE_TARGET是动态参数可以在不重启数据库的情况下修改。但是SGA_TARGET受限于 sga_max_sizeSGA_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;

    如果使用的是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,并执行下面的查询:

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。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: oracle数据库