SGA内参数设置1、Log_buffer对于日志缓冲区的大小设置,通常我觉得没有过多的建议,因为参考LGWR写的触发条件之后,我们会发现通常超过3M意义不是很大。作为一个正式系统,可能考虑先设置这部分为log_buffer=1—3M 大小,然后针对具体情况再调整。
2、Large_pool_size对于大缓冲池的设置,假如不使用MTS,建议在20—30M 足够了。这部分主要用来保存并行查询时候的一些信息,还有就是RMAN在备份的时候可能会使用到。如果设置了MTS,则由于UGA部分要移入这里,则需要具体根据server process数量和相关会话内存参数的设置来综合考虑这部分大小的设置。 3、Java_pool_size假如数据库没有使用JAVA,我们通常认为保留10—20M大小足够。事实上可以更少,甚至最少只需要32k,但具体跟安装数据库的时候的组件相关(比如http server)。 4、shared_pool_size这是迄今为止最具有争议的一部分内存设置。按照很多文档的描述,这部分内容应该几乎和数据缓冲区差不多大小。但实际上情况却不是这样的。首先我们要考究一个问题,那就是这部分内存的作用,它是为了缓存已经被解析过的SQL,而使其能被重用,不再解析。这样做的原因是因为,对于一个新的SQL(shared_pool里面不存在已经解析的可用的相同的SQL),数据库将执行硬解析,这是一个很消耗资源的过程。而若已经存在,则进行的仅仅是软分析(在共享池中寻找相同SQL),这样消耗的资源大大减少。所以我们期望能多共享一些SQL,并且如果该参数设置不够大,经常会出现ora-04031错误,表示为了解析新的SQL,没有可用的足够大的连续空闲空间,这样自然我们期望该参数能大一些。但是该参数的增大,却也有负面的影响,因为需要维护共享的结构,内存的增大也会使得SQL的老化的代价更高,带来大量的管理的开销,所有这些可能会导致CPU的严重问题。在一个充分使用绑定变量的比较大的系统中,shared_pool_size的开销通常应该维持在300M以内。除非系统使用了大量的存储过程、函数、包,比如oracle erp这样的应用,可能会达到500M甚至更高。于是我们假定一个1G内存的系统,可能考虑设置该参数为100M,2G的系统考虑设置为150M,8G的系统可以考虑设置为200—300M。

解决方案 »

  1.   

    这还看一的数据库运行在什么服务模式,一般你的共享池可以开的物理内存的1/2—1/3,我们可以根据需求调整,一般9I默认是100多M,我的建议你如果做为数据库服务器,可以使用到IG内存左右
      

  2.   

    请问shared_pool_size,db_cache_size,shared_pool_reservered_size它们大小比率大概是多大?
      

  3.   

    shmmax 
      含义:这个设置并不决定究竟Oracle数据库或者操作系统使用多少物理内存,只决定了最多可以使用的内存数目。这个设置也不影响操作系统的内核资源。 
      设置方法:0.5*物理内存 
      例子:Set shmsys:shminfo_shmmax=10485760   shmmin 
      含义:共享内存的最小大小。 
      设置方法:一般都设置成为1。 
      例子:Set shmsys:shminfo_shmmin=1:   shmmni 
      含义:系统中共享内存段的最大个数。 
      例子:Set shmsys:shminfo_shmmni=100   shmseg 
      含义:每个用户进程可以使用的最多的共享内存段的数目。 
      例子:Set shmsys:shminfo_shmseg=20:   semmni 
      含义:系统中semaphore identifierer的最大个数。 
      设置方法:把这个变量的值设置为这个系统上的所有Oracle的实例的init.ora中的最大的那个processes的那个值加10。 
      例子:Set semsys:seminfo_semmni=100   semmns 
      含义:系统中emaphores的最大个数。 
      设置方法:这个值可以通过以下方式计算得到:各个Oracle实例的initSID.ora里边的processes的值的总和(除去最大的Processes参数)+最大的那个Processes×2+10×Oracle实例的个数。 
      例子:Set semsys:seminfo_semmns=200   semmsl: 
      含义:一个set中semaphore的最大个数。 
      设置方法:设置成为10+所有Oracle实例的InitSID.ora中最大的Processes的值。 
      例子:Set semsys:seminfo_semmsl=-200