oracle如何限制内存 oracle 修改内存

Oracle关于内存参数及大页设置的相关概念和设置之Limits概念和配置

最近,对Linux大页的调整,所以重温了一些Linux内存及SGA等相关概念、参数和配置,这里进行一下记录,省的总Google.

荷塘网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设等网站项目制作,到程序开发,运营维护。创新互联自2013年创立以来到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联。

limits.conf文件实际是Linux PAM(插入式认证模块,Pluggable Authentication Modules)中 pam_limits.so 的配置文件,突破系统的默认限制,对系统访问资源有一定保护作用。 limits.conf 和sysctl.conf区别在於limits.conf是针对用户,而sysctl.conf是针对整个系统参数配置。

limits.conf是 pam_limits.so的 配置文件,然後/etc/pam.d/下的应用程序调用pam_***.so模块。譬如说,当用户访问服务器,服务程序将请求发送到PAM模块,PAM模块根据服务名称在/etc/pam.d目 录下选择一个对应的服务文件,然後根据服务文件的内容选择具体的PAM模块进行处理。

格式为:

-c 指定修改core文件的大小,1000指定了core文件大小。也可以对core文件的大小不做限制,如: ulimit -c unlimited

对於需要做许多套接字连接并使它们处於打开状态的应用程序而言,最好通过使用ulimit -n,或者通过设置nofile参数,为用户把文件描述符的数量设置得比默认值高一些

maxlogins - 此用户允许登录的最大数目

注意:要使 limits.conf 文件配置生效,必须要确保 pam_limits.so 文件被加入到启动文件中。查看 /etc/pam.d/login 文件中有:session required /lib/security/pam_limits.so

详细说明:

username|@groupname:设置需要被限制的用户名,组名前面加@和用户名区别。也可以用通配符*来做所有用户的限制。

type:有 soft,hard 和 -,

soft 指的是当前系统生效的设置值。

hard 表明系统中所能设定的最大值。

soft 的限制不能比har 限制高。

用 - 就表明同时设置了 soft 和 hard 的值。

resource:

示例,若机器上部署了ORACLE数据库,我们需要对oracle用户的资源做下调整,如下:

要使 limits.conf 文件配置生效,必须要确保 pam_limits.so 文件被加入到启动文件中。查看 /etc/pam.d/login 文件中有:

--查看当前系统配置文件ulimit的全局配置

ulimit -a

如果未进行具体设置的话,会使用默认配置,如下查看:

批注:当使用*号让全局用户生效的时候,生效的nproc的值大小是受文件/etc/security/limits.d/90-nproc.conf中nproc值大小制约的,而如果仅仅是针对某个用户,那麽就不受该文件nproc值大小的影响。

Linux系统 /etc/security/limits.conf 配置

参考自

如何限制单个ORACLE进程占用内存

首先需要分清,物理内存和虚拟内存的概念。然后你需要知道什么是“虚空间”。 物理内存到虚拟内存的转换因不同 CPU 和操作系统的不同而不同,而且机制过于复杂,不说了。 首先,不是说你的机器有 1.5G 的物理内存就可以分配到内存。

oracle怎么设置自动管理内存

在oracle 11g中,使用一个参数memory_target就能够实现SGA和PGA组件依据工作负荷进行自动内存分配。oracle推荐使用自动内存管理简化内存分配。

oracle 11g依然支持手工内存分配:

1:oracle 11g使用memory_target来支持内存自动分配。

2:使用sga_target和pga_target参数来设置SGA和PGA,数据库会在这两个组件中自我优化。

3:你也可以手工设置SGA中的各个组件。比如db_cache_size,shared_pool_size等组件。

oracle 11g中新的内存初始化参数:

有两个新的关键的内存初始化参数memory_target(动态参数,设置分配给实例的内存数)和memory_max_size(静态参数,这个参数是可选的,设置实例能够分配的最大内存,设置的是memory_target的上限值)。

注意:虽然memory_target是一个动态参数,但是当数据库运行时,你不能从非自动内存管理交换到自动内存管理。必须重启数据库将参数应用到实例启动过程才行。

如何使oracle的SGA在32位的操作系统下超出2G?

Win2003 :

由于32位的CPU的在windows系统中2G给系统用2G给应用程序使用,如系统及oracle参数不作修改时,oracle的SGA内存使用不能超过1.7G,所以要对一些进行windos

ows和oracle参数据进行修改,大致有以下几步:一 windows 上的参数据修改:

1. 修改boot.ini文件,加/3GB /PAE:

在这行,multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows" /3GB /PAE 2.修改windows 注册表:

regedit到HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0 这个目录中找到AWE_WINDOW_MEMORY这个参数,将其修改为oracle需要内存的大小:例如:6G时为:6*1024*1024*1024

这个参数如不存大时,可以新建一个字符串名为AWE_WINDOW_MEMORY,值为上面讲过的大小,这个值需要足够大,不够时将报:

ORA-27102 out of memory

OSD-00034 Message 34 not found; Product=RDBMS;facility =SOSD

O/S Error: (OS 8) Not enough storage is available to process this command

3.修改windows控制面板中的管理工具-- 域安全策略-- 本地安全策略 --锁定内存页 中加入启oracle数据库的OS用户名.

二 ORACLE数据库中要改的参数:

1.在改参数之前最好能先备份一个spfile到pfile 文件以防数据库修改失败时可以从这个参数文件在启动数据库: create pfile='d:\inittest.ora' from spfile; 2.主要修改的参数为:

_db_block_lru_latches --这个参数据大小为=CPU数*2*8

取消参数据:db_cache_size,sga_max_size

db_block_buffers

USE_INDIRECT_DATA_BUFFERS=TRUE

SQL shutdown immediate;

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL startup

ORACLE 例程已经启动。Total System Global Area 1008280152 bytes

Fixed Size 455256 bytes

Variable Size 478150656 bytes

Database Buffers 528482304 bytes

Redo Buffers 1191936 bytes

数据库装载完毕。

数据库已经打开。

SQL alter system set "_db_block_lru_latches"=128 scope=spfile;系统已更改。SQL alter system reset db_cache_size scope=spfile sid='*';系统已更改。SQL alter system set lock_sga=false scope=spfile;系统已更改。SQL alter system set db_block_buffers=1179648 scope=spfile;系统已更改。SQL alter system set use_indirect_data_buffers=true scope=spfile;系统已更改。SQL create pfile='d:\init2.ora' from spfile;文件已创建。SQL shutdown immediate;

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。可以通过OEM来修改PGA,shared pool这些内存大小

SQL startup

ORACLE 例程已经启动。Total System Global Area 7516192768 bytes

Fixed Size 455256 bytes

Variable Size 478150656 bytes

Database Buffers 3528482304 bytes

Redo Buffers 1191936 bytes

数据库装载完毕。

数据库已经打开。

Linux

有不少用户认为在32位Linux,只能设置约1.7GB的Oracle SGA。也有不少用户在不同的Linux发行版中使用相同的配置过程,获得了不同的SGA最大值,便认为某些Linux发行版存在问题。这些想法都比较片面。实际上 32位Linux上Oracle SGA 的容量取决于三个指标,即:Linux kernel 版本、Oracle Database 版本、Linux 内核参数shmmax。这里跟据一些网上文章做了些查正,做一些分析吧。一、内核版本的影响在32位Linux平台,至少都有两套内核供用户使用。一个是smp核心,一个是hugemem核心。两个核心的区别在于直接映射的内核数据代码地址空间的区别:SMP 核心:在x86架构下,虚拟地址空间的大小为4G。在这4G空间中,用户空间占3G (0×00000000到0xbfffffff),核心空间占1G(0xc0000000到0xffffffff)。这样的分配策略称为3G/1G分配。具体的分配方式如下:1. 0GB-1GB User space - Used for text/code and brk/sbrk allocations (malloc uses brk for small chunks)2. 1GB-3GB User space - Used for shared libraries, shared memory, and stack; shared memory and malloc use mmap (malloc uses mmap for large chunks)3. 3GB-4GB Kernel Space - Used for the kernel itself这种分配方式对于拥有1G物理内存以下的系统是没有任何问题的,即使超过1G物理内存,3G/1G分配策略也没有什么问题,因为内核可以在高端内存区域 (物理地址1G以上的内存)中存放一些内核数据结构(比如页缓冲等)。然而,随着物理内存的增多,3G/1G分配策略的问题也逐渐会暴露出来。这是因为一些关键的内核数据结构 (比如用于管理物理内存的mem_map[]) 是存放在1G核心空间之内的。对于32G内存的系统,mem_map[]会占用近 0.5G的低端内存(物理地址896M以下的内存),这样留给核心其他部分的内存就不到所有内存的1.5%;而对于64G内存的系统,mem_map[] 本身就会耗尽所有的低端内存,造成系统无法启动。但是把mem_map[]放到高端内存的做法也不太实际,因为mem_map[]和内存管理,体系结构相关底层实现,文件系统以及驱动等几乎所有的核心的关键部分均有联系,这时候就需要使用hugemem核心了。hugemem 核心:与SMP的3G/1G策略不同,hugemem 使用4G/4G分配方式。可以使核心空间由1G增加到4G,而用户空间也由3G增加到4G。相比3G/1G分配策略,对于4G物理内存系统,使用4G/4G分配可以增加低端内存达3倍以上,而对于32G物理内存系统,则会有更多的提升,达到原来的6倍。 理论上,4G/4G策略可以支持物理内存达200G的x86系统(如果硬件没有限制的话),即使对于这样的系统,4G/4G策略也能保证留有1G可用的低端内存。不论能否理解上面的解释,只须要记住 smp 和 hugemem 两个核心,一个是 3G/1G策略,一个是4G/4G策略即可。二、Oracle Database 版本:Oracle SGA 是挂载在内存用户空间中,不同版本的 Oracle Database ,挂载SGA起始地址是不同的:Oracle 10g Release 1:挂载SGA的起始地址为0×50000000(1.25GB)Oracle 10g Release 2:挂载SGA的起始地址为0×20000000(0.5GB)(其它版本未查正,有兴趣可以自已看看Oracle手册)从这个结果可以看出,理论上若使用3G/1G的smp核心,Oracle 10g Release 1 的SGA可设置到 3GB - 1.25 = 1.75GB 。正是因此,也有人认为Oracle SGA 只能设置到 1.75GB。而升级至 R2 版本,则可以设置到 3GB - 0.5GB = 2.5GB 。相同的,使用 4G/4G 的hugemem 核心能够获得多大的SGA 就很清楚了。

三、kernel shmmax 参数:shmmax定义单个共享内存段的最大值,它的取值范围区间是[0,4294967295], 单位为byte,4294967295 bytes即4294967296 bytes(4GB)减去1。一般来说,它应该足够大以容下整个SGA,避免SGA使用多个共享内存段造成Oracle性能下降。那么,将shmmax设置为最大值4294967295,使用 hugmemem 核心,Oracle 10g R2 版本,则理论上的SGA最大值为 3.5GB。尽管用户进程可用的虚拟地址空间为4GB以及shmmax的最大值为4294967295,仍然可以通过使用内存文件系统(in-memory filesystem,比如tmpfs、ramfs以及hugetlbfs)打开Oracle的Very Large Memory (VLM)特性来扩展SGA超过4GB,比如6GB。但是这种方法有个不方便的地方是,用户不能够再使用Oracle 10g中的Automatic Shared Memory Management了。总结一下:SMP核心和hugemem核心的影响:SMP核心:1GB+3GB,SGA最大值为1.75GB(3GB-1.25GB)Hugemem核心:4GB+4GB , SGA最大值为2.75GB(4GB-1.25GB)Oracle 不同版本的影响:Oracle 10g Release 1:挂载SGA的起始地址为0×50000000(1.25GB)Oracle 10g Release 2:挂载SGA的起始地址为0×20000000(0.5GB)那么:Hugemem 核心 + Oracle 10g Release 2 ,SGA最大值为3.5GB(4GB-0.5GB)BTW:由于64位系统对应16EB寻址范围,而不是32位系统的4GB,所以想要获得更大SGA,性能更好的效果,应该优先使用 64 位系统,而不是通过32系统配合内存文件系统来配置了。

如何限制oracle中用户的资源的使用

可以创建不同的资源限制,最好将ALTER SYSTEM SET RESOURCE_LIMIT=TRUE

写在init文件中:RESOURCE_LIMIT=TRUE ,不然下次启动可能……

create profile low_limits limit

idle_time 10 ----分钟

connect_time unlimited; ----分钟

然后把某种配置文件赋给某个用户:

alter user youruser profile low_limits;

然后可以查看:

select profile from dba_users where username='YOURUSER';

select * from dba_profile where profile='low_limits';

其它资源比如:

session_per_user 限制一个用户名可进行的连接

cpu_per_session 一次会话用户可使用的server的cpu时间(白分秒)

cpu_per_call 用户进程对数据库一次调用用时(百分秒)

private_sga 限制一个用户可占用内存

oracle 11g 数据库实例的内存大小是由哪个参数来控制

数据库实例的内存主要包括 sga 和 pga

9i 以后 SGA 需要设置 sga_max_size 和 sga_target 两个参数

PGA 需要设置 pga_aggregate_target 参数


新闻标题:oracle如何限制内存 oracle 修改内存
文章网址:http://myzitong.com/article/hjgdjj.html