如何设定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 name=‘ASH buffers‘;

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;

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 name=‘ASH buffers‘;

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;

---计算一下此时的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 name=‘ASH buffers‘;

POOL        NAME                            BYTES

------------ -------------------------- ----------

shared pool  ASH buffers                  67108864

因此Ash Buffer的计算公式可以修正为

Size of ASH Circular Buffer = Max [Min [ #CPUs * 2 MB, 5% of Shared Pool Size, 30MB ], _ash_size ]

如果要调整ash buffer的大小,需要修改_ash_size参数,且确保_ash_size> Min [ #CPUs * 2 MB, 5% of Shared Pool Size, 30MB ]

时间: 2024-08-23 09:08:19

如何设定ASH buffer大小的相关文章

窗体的基类中没有设定大小,所以才不能居中,若要窗体居中,必须使用setfixedsize()函数或者resize()函数设定窗体的大小,居中才能正常使用

最近开发中,遇到了窗体不能居中的问题,看了网上的很多文章,窗口居中,无非都是move至窗口的中心目标; 有两种方式, 一种在构造函数中直接计算中心坐标; 另一种是在窗口show后再move至相应坐标.但是自己在构造函数中添加了对应的句子以后,窗体不在窗口的(0,0)点显示,反而在右下角显示,自己很是郁闷.网上的两种方法,基本操作如下: 方法一:在窗口(QWidget类及派生类)的构造函数中添加如下代码: #include <QDesktopWidget> //.......QDesktopWi

linux 网卡buffer大小

参考截取一部分:https://blog.csdn.net/ysu108/article/details/7764461 在linux下可以修改协议栈改变tcp缓冲相关参数: 修改系统套接字缓冲区 echo 65536 > /proc/sys/net/core/rmem_maxecho 256960 > /proc/sys/net/core/wmem_maxecho 65536 > /proc/sys/net/core/wmen_default 修改tcp接收/发送缓冲区echo &qu

[函數] Firemonkey Android 取得系统参数设定的字型大小

Android 系统参数设定内,可以设定字型大小: 可以透过下面代码来取得字型大小比例: function FontScale: Single; var Resources: JResources; Configuration: JConfiguration; begin Result := 1; if TAndroidHelper.Context <> nil then begin Resources := TAndroidHelper.Context.getResources; if Re

[转]Oracle数据库ASH和AWR的简单介绍

在Oracle数据库中,有时我们可能会遇到这样的术语:ASH和AWR,那么它们是怎样产生的呢?它们的作用又是什么呢?本文我们就来介绍这一部分内容.       1.10g之前 用户的连接将产生会话,当前会话记录保存在v$session中:处于等待状态的会话会被复制一份放在v$session_wait中.当该连接断开后,其原来的连接信息在v$session和v$session_wait中就会被删除.这是10g之前的状况.       2.v$session_wait_history与ASH 若是一

Oracle的awr和ash

1.     10g之前 用户的连接将产生会话,当前会话记录保存在v$session中:处于等待状态的会话会被复制一份放在v$session_wait中.当该连接断开后,其原来的连接信息在v$session和v$session_wait中就会被删除.这是10g之前的状况. 2.     v$session_wait_history与ASH 若是一个普通的会话(我是指没有大量地耗费资源),则对于性能调整来说无足轻重.但若该会话在活动时大量占用了资源(比如:CPU,内存,I/O等),该会话信息的丢失

[转载]Buffer cache的调整与优化

Buffer Cache是SGA的重要组成部分,主要用于缓存数据块,其大小也直接影响系统的性能.当Buffer Cache过小的时候,将会造成更多的free buffer waits事件.下面将具体描述Buffer Cache的作用.调整与优化. 一.SGA的所有组件 从动态视图v$sga_dynamic_components获取SGA的相关信息 SELECT component, current_size, min_size FROM v$sga_dynamic_components; COM

innodb insert buffer 插入缓冲区的理解

今天在做一个大业务的数据删除时,看到下面的性能曲线图 在删除动作开始之后,insert buffer 大小增加到140.对于这些状态参数的说明 InnoDB Insert Buffer 插入缓冲,并不是缓存的一部分,而是物理页,对于非聚集索引的插入或更新操作,不是每一次直接插入索引页.而是先判断插入的非聚集索引页是否在缓冲池中.如果在,则直接插入,如果不再,则先放入一个插入缓冲区中.然后再以一定的频率执行插入缓冲和非聚集索引页子节点的合并操作.使用条件:非聚集索引,非唯一 Ibuf Insert

Buffer cache 的调整与优化

Buffer cache 的调整与优化 -============================== -- Buffer cache 的调整与优化(一) --============================== Buffer Cache是SGA的重要组成部分,主要用于缓存数据块,其大小也直接影响系统的性能.当Buffer Cache过小的时候,将会造成更多的free buffer waits事件. 下面将具体描述Buffer Cache的作用,调整与优化. 一.SGA的所有组件 从动态

Java NIO:Buffer、Channel 和 Selector

Buffer 一个 Buffer 本质上是内存中的一块,我们可以将数据写入这块内存,之后从这块内存获取数据. java.nio 定义了以下几个 Buffer 的实现,这个图读者应该也在不少地方见过了吧. 其实核心是最后的 ByteBuffer,前面的一大串类只是包装了一下它而已,我们使用最多的通常也是 ByteBuffer. 我们应该将 Buffer 理解为一个数组,IntBuffer.CharBuffer.DoubleBuffer 等分别对应 int[].char[].double[] 等.