Benjamin Zhang

目前就职于中科院计算机网络信息中心,主要兴趣集中在数据库,操作系统,中间件。

修改Processes和SGA

07 Jan 2019 » Oracle

场景: 测试环境的process使用的太多,报了如下错误: ORA-00020: maximum number of processes (200) exceeded

修改sga的前提条件

由于修改sga参数,可能会报如下错误:

SQL> startup;
ORA-27102: out of memory
Linux-x86_64 Error: 28: No space left on device
Additional information: 2097152

解决思路

这个问题是由于SGA的值大于共享内存就会报上述错误。

共享内存在shmall这个参数设置,shmall的单位为Page(页),1个page=4096B。相当于4KB。查看命令如下:

[root@oradb ~]# getconf PAGE_SIZE
4096

shmall需要大于16GB,那么shmall的值必须16*(1024*1024)\4=4194304。

如果服务器的内存为32GB的话,那么shmall的建议值应该是8388608。

  • 修改/etc/sysctl.conf的参数,命令如下:
kernel.shmall= 8388608
  • 参数配置立即生效。

    # sysctl -p
    [root@oradb ~]# cat /proc/sys/kernel/shmall
    8388608
    

1.查看当前的processes和sga

SQL> show parameter processes;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes                      integer     1
db_writer_processes                  integer     2
gcs_server_processes                 integer     0
global_txn_processes                 integer     1
job_queue_processes                  integer     1000
log_archive_max_processes            integer     4
processes                            integer     200
SQL> show parameter sga;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
lock_sga                             boolean     FALSE
pre_page_sga                         boolean     FALSE
sga_max_size                         big integer 1152M
sga_target                           big integer 1152M

2.修改processes和sga

以服务器32G内存为例,16GB设置为16GB

SQL> alter system set processes=500 scope = spfile;
SQL> alter system set sga_max_size=16384M scope=spfile;
SQL> alter system set sga_target=16384M scope=spfile;

3.spfile写入pfile备用

SQL> create pfile from spfile;

4.查看当前spfile的位置

如果value值为空,说明使用的是pfile文件 如果value有值,说明使用的是spfile。 命令如下:

SQL> SELECT NAME, VALUE FROM V$PARAMETER WHERE NAME ='spfile';

NAME
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
spfile
/u01/app/product/11.2.0/db_1/dbs/spfileoradb.ora

第二种方式

SQL> show parameter pfile;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      /u01/app/product/11.2.0/db_1/d
                                                 bs/spfileoradb.ora

5.重启数据库

由于是静态参数,需要重启数据库,使得参数生效:

SQL> shutdown immediate;   //数据库关闭
SQL>startup                //oracle实例启动

enjoy!just for fun