查看: 15643|回复: 18

oracle用的内存到底是属于comp还是noncomp?

[复制链接]
论坛徽章:
3
生肖徽章:虎
日期:2007-09-18 15:23:56会员2007贡献徽章
日期:2007-09-26 18:42:10奥运会纪念徽章:皮划艇激流回旋
日期:2008-06-12 17:50:19
发表于 2008-6-16 11:41 | 显示全部楼层 |阅读模式
oracle用的内存到底是属于comp还是noncomp?

% Comp
The percentage of real memory currently allocated to computational page frames. Computational page frames are
generally those that are backed by paging space.
% Noncomp
The percentage of real memory currently allocated to non-computational frames. Non-computational page frames
are generally those that are backed by file space, either data files, executable files, or shared library
files.

按man的解释理解
数据文件应该是属于% Noncomp

而在下面这个系统中(上面只有数据库应用) 为什么Comp却一直很高?
MEMORY
Real,MB   16896
% Comp     79.7
% Noncomp   8.1
% Client    8.1

我自己的理解是
当oracle的操作是逻辑IO(oracle认为是逻辑IO)时候--就是说需要读取的数据可以在内存中找到时(real memory+paging space)
这时候用的内存就属于Comp

而当在内存中找不到时(real memory+paging space)
需要经过物理IO(oracle认为是物理IO)从数据文件中读入到内存中
这时候用到的内存就属于Noncomp

不知道我这样理解对不对
论坛徽章:
3
生肖徽章:虎
日期:2007-09-18 15:23:56会员2007贡献徽章
日期:2007-09-26 18:42:10奥运会纪念徽章:皮划艇激流回旋
日期:2008-06-12 17:50:19
 楼主| 发表于 2008-6-16 14:21 | 显示全部楼层
顶下

使用道具 举报

回复
论坛徽章:
1
ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15
发表于 2008-6-16 14:35 | 显示全部楼层
哈哈,是AIX吧

我认为是comp内存(计算内存)

使用道具 举报

回复
论坛徽章:
3
生肖徽章:虎
日期:2007-09-18 15:23:56会员2007贡献徽章
日期:2007-09-26 18:42:10奥运会纪念徽章:皮划艇激流回旋
日期:2008-06-12 17:50:19
 楼主| 发表于 2008-6-16 15:02 | 显示全部楼层
我看到的现象也是 comp 类型
但是就是原因搞不清楚

了解有关 AIX® 虚拟内存管理器 (AIX VMM) 如何工作,以及如何利用可调参数来调整 AIX VMM 操作的详细信息。AIX VMM 负责管理系统中所有的内存。AIX VMM 的操作对于系统性能来说是至关重要的,并且它还提供了几个可调参数,对于不同的工作负载,您可以使用这些参数对其操作进行优化。
引言
AIX® 虚拟内存管理器 (AIX VMM) 是一种基于分页的虚拟内存管理器。一个分页就是一个固定大小的数据块。分页既可以位于内存中(也就是说,映射到物理内存中的某个位置)、也可以位于磁盘中(也就是说,从物理内存中替换到分页空间或者文件系统)。
AIX VMM 有一个非常独特的方面,即缓存的文件数据的管理。AIX VMM 将缓存的文件数据与对其它类型虚拟内存(例如,进程数据、进程堆栈等等)的管理集成到了一起。它将文件数据缓存为分页,就如同进程的虚拟内存一样。
AIX 根据需要将分页映射到实际内存。如果应用程序引用了某个分页,而该分页并没有映射到实际内存中,那么系统将产生一个缺页。为了解决缺页,AIX 内核会将所引用的分页加载到实际内存中的某个位置。如果所引用的分页是一个新的分页(也就是说,位于先前从未引用过的进程数据堆中的分页),那么“加载” 所引用的分页只需要用零来填充一个实际内存位置(也就是说,提供一个填满零的分页)。如果所引用的分页是一个预先存在的分页(也就是说,文件中的某个分页、或者先前换出的某个分页),那么加载所引用的分页需要从磁盘(分页空间或者磁盘文件系统)中将该分页读入到实际内存中的某个位置。
在将分页加载到实际内存中之后,它将被标记为未经修改的。如果某个进程或者内核修改了该分页,那么该分页的状态将更改为已修改的。这允许 AIX 跟踪在将某个分页加载到内存之后是否对其进行过修改。
随着系统将更多的分页添加到实际内存中,实际内存中空闲位置(可以包含分页)的数目将会减少。也可以将空闲位置的数目称为空闲分页框架的数目。当空闲分页框架的数目达到某个较低的值时,AIX 内核就必须清空实际内存中的某些位置,以便重用新的分页。这个过程也称为分页替换。
AIX VMM 提供了一些后台守护进程,专门负责进行分页替换。其中一个分页替换守护进程称为 lrud(显示为 ps -k 的输出中的 lrud)。lrud 守护进程负责在内存分页中进行扫描,并回收某些分页以便为实际内存腾出空间。当分页替换守护进程确定它希望回收某个特定的分页时,这个分页替换守护进程将执行下面两项操作中的一项:
•        如果该分页经过了修改,那么分页替换守护进程将该分页写入到辅助存储位置(例如,分页空间或者文件系统磁盘)。将包含该分页的物理内存块标记为空闲,并为其它的分页做好重用的准备。
•        如果该分页没有经过修改,那么分页替换守护进程可以简单地将物理内存块标记为空闲,这样一来,就可以将该物理内存块重用于另一个分页。在这种情况下,分页替换守护进程不需要将该分页写入到磁盘,因为该分页在内存中的版本并没有经过修改,因此与位于磁盘中(在分页空间中、或者在磁盘文件系统中)的分页副本完全相同。
分页替换守护进程可以根据系统内存的使用情况和可调参数,选择不同类型的分页进行回收。本文剩下的部分将详细地介绍分页替换守护进程如何选择要进行回收的分页。
分页类型
从本质上看,AIX 中一共有两种分页类型:
•        工作存储分页(Working storage pages)
•        永久存储分页(Permanent storage pages)
工作存储
工作存储分页是一些包含易变 数据(换句话说,即重新启动后将不复存在的数据)的分页。在其他的平台中,工作存储内存有时也称为匿名 内存。下面提供了一些由工作存储分页组成的虚拟内存区域的示例:
•        进程数据
•        堆栈
•        共享内存
•        内核数据
当需要将经过修改的工作存储分页替换出(从内存移动到磁盘)时,它们将被写入到分页空间。不会将工作存储分页写入到文件系统。
当进程退出时,系统将释放其所有的私有工作存储分页。因此,当进程退出时,系统将释放进程数据和堆栈的工作存储分页。对于共享内存区域,直到删除共享内存区域之后,才会释放其工作存储分页。
永久存储
永久存储分页是一些包含永久数据(也就是说,重新启动后仍然存在的数据)的分页。这种永久数据就是文件数据。因此,永久存储分页就是缓存在内存中的部分文件。
当经过修改的永久存储分页需要换出(从内存移动到磁盘)的时候,会将它写入到文件系统中。如前所述,可以直接释放没有经过修改的永久存储分页,无需将其写入到文件系统中,因为文件系统包含该数据的原始副本。
例如,如果一个应用程序正在读取某个文件,那么该文件数据将缓存于永久存储分页的内存中。这些永久存储分页没有经过修改,这意味着并没有在内存中对这些分页进行修改。因此,内存中的永久存储分页与磁盘中的文件数据完全相同。当 AIX 需要清空内存的时候,它只需要“释放”这些分页即可,而不将任何内容写入到磁盘。如果应用程序对某个文件进行写操作(而不是读操作),那么永久存储分页将是“经过修改的”,并且 AIX 必须在释放这些分页之前将其刷新到磁盘。
您可以将永久存储分页划分为两种子类型:
•        客户端分页
•        非客户端分页
非客户端分页是一些包含缓存的日志文件系统 (JFS) 文件数据的分页。非客户端分页有时也称为持久性分页。客户端分页是一些包含所有其他文件系统(例如,JFS2 和网络文件系统 (NFS))的缓存数据的分页。
分页分类
为了帮助分页替换守护进程更好地选择用来进行替换的分页,AIX 将分页分为下面两种类型:
•        计算性分页
•        非计算性分页
计算性分页是一些用于文本、数据、堆栈和进程的共享内存的分页。非计算性分页是一些包含正在进行读取和写入的文件的文件数据的分页。
如何对分页进行分类
所有的工作存储分页都是计算性的。不会将工作存储分页标记为非计算性的。
永久存储分页既可以是计算性的、也可以是非计算性的,这取决于您使用这些分页的方式。如果一个文件包含某个进程的可执行文本,那么系统会将该文件视为计算性的,并且将该文件中的所有永久存储分页都标记为计算性的。如果该文件不包含可执行文本,那么系统会将该文件视为非计算性的,并且将该文件中的所有永久存储分页都标记为非计算性的。
当您第一次打开一个文件的时候,AIX 内核将创建一个内部 VMM 对象以代表该文件。并且将其标记为非计算性的,这意味着所有的文件在一开始都是非计算性的。
随着程序对该文件进行读写操作,AIX 内核将该文件的数据作为非计算性的永久存储分页在内存中进行缓存。
如果关闭该文件,那么 AIX 内核将继续在内存中(在永久存储分页中)缓存该文件的数据。内核继续缓存该文件是为了提高性能;例如,如果稍后出现了另一个进程,并且它也使用了相同的文件,那么该文件数据仍然位于内存中,并且 AIX 内核不需要从磁盘读入该文件的数据。
如果某个文件因为指令取出发生了缺页,那么会将非计算性文件转换为计算性状态。当对某个文件出现进程缺页(意味着该进程引用了文件的部分内容,而这部分内容当前没有缓存在永久存储分页的内存中)的时候,该进程将产生一个缺页。如果是由于指令取出而导致的缺页(意味着该进程正在尝试加载来自该分页的指令,以便进行相关操作),那么内核会将该文件标记为计算性的。这涉及到将该文件中的所有分页都标记为计算性的。一个文件要么完全是计算性的,要么完全是非计算性的。
在将文件标记为计算性文件之后,它将一直保持为计算性文件,直到删除该文件(或者重新启动系统)。因此,即使移动了该文件、或者对它进行了重命名,该文件仍然标记为计算性的文件。
分页替换
AIX 分页替换守护进程一次扫描内存的一个分页,找出要回收的分页以释放内存。分页替换守护进程必须仔细地选择分页,以便将分页对系统的性能影响降到最低,并且分页替换守护进程将根据可调参数设置和系统情况来选择不同类型的分页。
您可以使用大量的可调参数来控制 AIX 选择分页进行替换的方式。
minperm 和 maxperm
minperm 和 maxperm 是两个最基本的分页替换可调参数。这两个可调参数用于指出 AIX 内核应该使用多少内存来缓存非计算性的分页。maxperm 可调参数指出应该用于缓存非计算性分页的最大内存量。
在缺省情况下,maxperm 是一个“非严格的”限制,这意味着在某些情况下可以超出这个限制。将 maxperm 设定为非严格的限制,这允许在具有可用空闲内存的时候,可以在内存中缓存更多的非计算性文件。通过将 strict_maxperm 可调参数设置为 1,就可以使 maxperm 限制成为“严格”的限制。当 maxperm 是严格限制的时候,即使有可供使用的空闲内存,内核也不允许非计算性分页的数目超出 maxperm 的限制。因此,将 maxperm 作为严格限制的缺点是,非计算性分页的数目不能超出 maxperm 的限制,并且在系统中具有空闲内存的时候,也不能使用更多的内存。
minperm 限制指出应该用于非计算性分页的最低内存量。
非计算性分页的数目称为 numperm:vmstat –v 命令可以显示系统的 numperm 值所占系统实际内存的百分比。

使用道具 举报

回复
论坛徽章:
3
生肖徽章:虎
日期:2007-09-18 15:23:56会员2007贡献徽章
日期:2007-09-26 18:42:10奥运会纪念徽章:皮划艇激流回旋
日期:2008-06-12 17:50:19
 楼主| 发表于 2008-6-16 15:03 | 显示全部楼层
按上面的理解

oracle引用到的分页属于 工作存储分页(Working storage pages)
而工作存储分页都属计算性分页

所以 oracle引用到的分页就属于 计算型分页

还有2个疑问
1
那么非计算型的分页是不是就只属于以下2种类型中 不包含可执行分页(指令取出)的部分?
•        客户端分页
•        非客户端分页
非客户端分页是一些包含缓存的日志文件系统 (JFS) 文件数据的分页。非客户端分页有时也称为持久性分页。客户端分页是一些包含所有其他文件系统(例如,JFS2 和网络文件系统 (NFS))的缓存数据的分页。
分页分类

2 如果内存足够大  是不是在一个只有oracle应用的系统中 paging space的使用率就会变的很低?
因为不存在缺页的情况  缺页已经被oracle处理了(它自己有自己的LRU list 引入和刷出 data block) 已经不会出现操作系统层面上的缺页

使用道具 举报

回复
论坛徽章:
1
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44
发表于 2008-6-16 15:14 | 显示全部楼层
这个概念很绕口,其实简单一点说:非计算就是AIX的文件系统缓存。
因为oracle有自已的缓存机制,所以在纯数据库服务器 上应该降低文件缓存数量,以避免重复缓存,所以在aix 需要用vmo将maxperm等值调低。

使用道具 举报

回复
论坛徽章:
3
生肖徽章:虎
日期:2007-09-18 15:23:56会员2007贡献徽章
日期:2007-09-26 18:42:10奥运会纪念徽章:皮划艇激流回旋
日期:2008-06-12 17:50:19
 楼主| 发表于 2008-6-23 09:31 | 显示全部楼层
自己上面的理解有问题

下面是loveunix斑竹的解释  大家可以了解下

非计算内存和计算内存的概念

看到有XD发帖说这个问题,我也想详细给大家一个说明,请各位老手新手指教。

通俗的说法:
凡是硬盘上有对应的数据,占用的内存,就是非计算内存,非计算内存需要被别的进程用到时,其中的数据无需page out,因为再次需要读取的时候从硬盘文件中拿出来即可。

凡是硬盘上没有数据对应的内存占用叫做计算内存,例如用C写个程序,分配一块1MB的内存,这部分内存不管其中数据是否有意义,硬盘上没有文件对应,叫做计算内存。

以上所谓“硬盘上有无对应数据”的前提是:计算内存、非计算内存是操作系统的分类,所以操作系统知道硬盘上有对应,才叫非计算内存。虽然任何数据库的内存占用绝大部分是磁盘缓冲,按理说其中的数据硬盘上有对应,但是,这些内存是数据库管理的,操作系统只知道这些内存是DBMS主动向操作系统申请的,其中放的什么,操作系统并不知道,所以是计算内存

breakdown:
计算内存、非计算内存都是指物理内存占用,而物理内存的情况,由于VMM机制,是时刻在变化的,所以只能说某一瞬间,计算内存、非计算内存各占用多少。

●计算内存:
凡是进程/程序运行中用程序代码向操作系统申请的内存,全部是计算内存,也就是说除非这个程序运行起来,除了自身代码占用的内存,一点额外的内存也不用,否则它几乎必然会造成计算内存占用的。说“几乎”,是因为计算内存、非计算内存都是指物理内存,如果一个程序申请了1MB内存,但一段时间没有用这部分内存,很可能在其他进程需要内存,且物理内存比较紧张时,按照LRU算法(Latest Recently Unused,最近最少使用),被操作系统部分或全部page out到paging space中,如果全部被page out了,可以说这个时刻,此进程没有使用计算内存。换句话说,就是程序申请了1MB内存,那么它在某一时刻占用的计算内存从0字节~1MB都有可能。

进程主动向操作系统申请分配的内存,从程序编码上来看,以C为例,典型的就是malloc,当然,还有程序语言中的隐式分配,反正对于操作系统来说都一样,例如char *string1="ABCDEFG"; int number=22222; 前者会导致自动向操作系统申请8个字节,后一个会申请一个字(两个字节)

当进程退出,或者意外崩溃,对于操作系统来说,它知道进程不在了,而进程申请的内存,操作系统明确知道是哪些的,在资源回收的过程中,会自动把这个进程申请的内存释放掉,这个过程是很快的。所以我们可以看到:如果计算内存高企,我们把应用一停,也就是把使用计算内存最多的进程停止,计算内存占用率立刻就下来了。


●非计算内存:
操作系统明确知道这部分内存的用途是放硬盘对应数据的,所以,显然这部分内存不是任何进程可以控制,也就是说不可能一个程序主动要求分配多少非计算内存或者释放多少。这部分完全是操作系统在直接管理:分配、记录状态、使用、释放,其他进程只可能用间接手段影响非计算内存,例如读写文件。

非计算内存我们常见的是如下用途:
——程序代码:当运行程序时,代码初始装入到物理内存的什么地方、重定位到什么地方,是操作系统管理的,它会记住程序代码放在物理内存什么地方,及其对应程序文件的位置。当程序代码占用的page frame需要被其他用途使用时,操作系统直接把这个page frame转给要使用这部分内存的进程,并记录标志,下次要是这个page原来的内容需要被引用,从对应程序文件中的对应位置读取进入物理内存。有些进程的某些计算内存占用是不能被替换的,例如执行VMM管理任务的操作系统核心进程,所以这部分会有操作系统机制设置标志,这个就是常说的pin住某些内存不准替换掉。
——磁盘访问缓冲区:这个不是常说的缓存区,缓存区(英文Cache)的目的是用来提高性能,而缓冲区(英文Buffer),是为了块设备访问特点的要求,比如硬盘块设备、逻辑卷块设备,必须读写的基本单位是一个块,一般是512字节,哪怕你只读写一个字节,也必须一次读进512字节,修改特定的那一个字节,然后再整个512字节块全部写出到硬盘。这就需要缓冲区的存在。缓冲区的总个数,是不固定的,操作系统可以根据同时在访问的块的数量随时调整。
——NFS访问缓冲区,原理基本同上;
——文件系统缓存:这个肯定是每一个字节都有硬盘文件对应的,显然是非计算内存。

[ 本帖最后由 ihekoko 于 2008-6-23 09:38 编辑 ]

使用道具 举报

回复
论坛徽章:
1
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44
发表于 2008-6-23 09:36 | 显示全部楼层
楼上不厚道,你应该把larry 和orian的讨论全贴出来。
这两人在aix界的地位和eygle及biti在oracle的地位类似吧

http://bbs.loveunix.net/thread-86160-1-2.html

使用道具 举报

回复
论坛徽章:
3
生肖徽章:虎
日期:2007-09-18 15:23:56会员2007贡献徽章
日期:2007-09-26 18:42:10奥运会纪念徽章:皮划艇激流回旋
日期:2008-06-12 17:50:19
 楼主| 发表于 2008-6-23 10:06 | 显示全部楼层
呵呵  我怕贴了地址没人看

使用道具 举报

回复
论坛徽章:
114
授权会员
日期:2005-10-30 17:05:332013年新春福章
日期:2013-02-25 14:51:24奔驰
日期:2013-08-01 21:18:36宝马
日期:2013-12-04 21:52:282014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14
发表于 2008-6-23 12:54 | 显示全部楼层
原帖由 ihekoko 于 2008-6-23 10:06 发表
呵呵  我怕贴了地址没人看



搞oracle 的,估计没几个看得懂那玩意,大致知道概念就可以了

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会,7折限时优惠重磅来袭!
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。

限时七折期:2019年8月31日前


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

大会官网>>
TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表