您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

如何设定ASH buffer大小

2024/6/18 10:32:41发布30次查看
ash buffer是sga里的一块循环使用的内存区域,用于存放mmon捕捉到的active session信息,mmnl每隔60min将ash buffer的内容经过过
ash buffer是sga里的一块循环使用的内存区域,用于存放mmon捕捉到的active session信息,mmnl每隔60min将ash buffer的内容经过过滤后dump到awr,对应的视图是dba_hist_active_sess_history,以腾出ash buffer空间用于之后的采集。ash buffer的大小在instance启动时就已经决定了,并且在instance运行期间不能被动态调整,那么ash buffer的大小是由哪些因素决定的?
关于ash buffer的大小mos 243132.1上有如下描述
size of ash circular buffer = max [min [ #cpus * 2 mb, 5% of shared pool size, 30mb ], 1mb ]
###看下实际环境里和ash buffer有关的参数
sql> show parameter cpu_count
name                                type        value
 ------------------------------------ ----------- ------------------------------
 cpu_count                            integer    16
sql> show parameter shared_pool_size
 name                                type        value
 ------------------------------------ ----------- ------------------------------
 shared_pool_size                    big integer 1312m
---计算一下ash buffer应该为多少大小
max [min [ 16 * 2 mb, 5%*1312m, 30mb ], 1mb ]=30mb
---实际ash buffer大小可以从v$sgastat、v$ash_info获得,均为32mb,和公式提供的稍有差别,选择32mb作为ash buffer
 select * from v$sgastat where;
 pool        name                            bytes
 ------------ -------------------------- ----------
 shared pool  ash buffers                  33554432
select total_size,fixed_size,sampling_interval from v$ash_info;
 total_size fixed_size sampling_interval
 ---------- ---------- -----------------
  33554432  33554432              1000
###更改一下cpu_count
 alter system set cpu_count=8 scope=spfile;
startup force
show parameter cpu_count
 name                                type        value
 ------------------------------------ ----------- ------------------------------
 cpu_count                            integer    8
---按照公式size of ash circular buffer = max [min [ #cpus * 2 mb, 5% of shared pool size, 30mb ], 1mb ]计算
ash buffer=max [min [ 8 * 2 mb, 5%*1312m, 30mb ], 1mb ]=16mb
---下面的查询结果应验了上面的计算
select total_size,fixed_size,sampling_interval from v$ash_info;
 total_size fixed_size sampling_interval
 ---------- ---------- -----------------
  16777216  16777216              1000
select * from v$sgastat where;
 pool        name                            bytes
 ------------ -------------------------- ----------
 shared pool  ash buffers                  16777216
###_ash_size隐含参数控制ash buffer的大小
 公式size of ash circular buffer = max [min [ #cpus * 2 mb, 5% of shared pool size, 30mb ], 1mb ]里的1mb是_ash_size的默认值
---_ash_size的默认值为1mb
 select ksppinm,ksppstvl from x$ksppi x, x$ksppcv y where (x.indx = y.indx) and ksppinm like '_ash_size%'
ksppinm                        ksppstvl
 ------------------------------ ------------------------------
 _ash_size                      1048618
---我们把_ash_size改大,改成64mb
 alter system set _ash_size=67108864 scope=spfile;
startup force
---计算一下此时的ash buffer值
ash circular buffer = max [min [ 8 * 2 mb, 5%*1315m, 30mb ], 64mb ]=64mb
---下面的查询结果应验了上面的计算
sql> select total_size,fixed_size,sampling_interval from v$ash_info;
total_size fixed_size sampling_interval
 ---------- ---------- -----------------
  67108864  67108864              1000
sql> select * from v$sgastat where;
pool        name                            bytes
 ------------ -------------------------- ----------
 shared pool  ash buffers                  67108864
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product