当前位置:Gxlcms > 数据库问题 > 记一次oracle内存分配不足,前端访问500报错,如何扩容oracle的memory_target内存

记一次oracle内存分配不足,前端访问500报错,如何扩容oracle的memory_target内存

时间:2021-07-01 10:21:17 帮助过:28人阅读

11g特性的内存管理需要用到/dev/shm共享文件系统,且要求/dev/shm大于 TARGET_MEMORY,否则会报错。

SQL> show parameter mem

NAME                     TYPE     VALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address         integer     0
inmemory_adg_enabled             boolean     TRUE
inmemory_clause_default          string
inmemory_expressions_usage         string     ENABLE
inmemory_force                 string     DEFAULT
inmemory_max_populate_servers         integer     0
inmemory_query                 string     ENABLE
inmemory_size                 big integer 0
inmemory_trickle_repopulate_servers_ integer     1
percent
inmemory_virtual_columns         string     MANUAL

NAME                     TYPE     VALUE
------------------------------------ ----------- ------------------------------
memory_max_target             big integer 4G        ------>系统分配给oracle最大的内存,要>= sga内存的大小
memory_target                     big integer 4G
optimizer_inmemory_aware         boolean     TRUE
shared_memory_address             integer     0
2.现在就是要扩容这块的大小,一般分配为物理内存的50%~80%

我们分配为6G.

3.查看/dev/shm虚拟内存的大小,在扩容memory_max_target之前要先扩容此虚拟内存

[oracle@scp ~]$ df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   41G   27G   15G  64% /
devtmpfs                 4.8G     0  4.8G   0% /dev
tmpfs                     4.0G  1.1G  1.7G  42% /dev/shm

[oracle@scp ~]$ vim /etc/fstab  在此文件的最后一行增加

tmpfs                   /dev/shm            tmpfs   defaults,size=6144M        0 0

mount -o remount,rw /dev/shm/   以可读写的方式重新加载/dev/shm磁盘

再次查看,发现   /dev/shm已经扩容

[root@scp ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   41G   27G   15G  64% /
devtmpfs                 4.8G     0  4.8G   0% /dev
tmpfs                    6.0G  2.4G  3.7G  39% /dev/shm

 

4.扩容memory_max_target

su - oracle

alter system set memory_max_target  =6G scope=spfile;

alter system set memory_target      =6G scope=spfile;

5.重启数据库

shut immediate

startup

lsnrctl start  启动监听

6.此时再次查看,已经扩容

SQL> show parameter mem;

NAME                     TYPE     VALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address         integer     0
inmemory_adg_enabled             boolean     TRUE
inmemory_clause_default          string
inmemory_expressions_usage         string     ENABLE
inmemory_force                 string     DEFAULT
inmemory_max_populate_servers         integer     0
inmemory_query                 string     ENABLE
inmemory_size                 big integer 0
inmemory_trickle_repopulate_servers_ integer     1
percent
inmemory_virtual_columns         string     MANUAL

NAME                     TYPE     VALUE
------------------------------------ ----------- ------------------------------
memory_max_target             big integer 6G
memory_target                 big integer 6G

 

但是,但是,我并没有在生产库上进行扩容,毕竟对oracle不熟,我还是请教了我们有经验的Oracle DBA,因为我们的这个数据库毕竟特殊,只有内部四五个人使用,按道理不会有太大并发,于是请那么dba帮忙排查

大概思路就是,他先拉了一份,awr报告,发现cpu的等待时间比较久,每条语句的执行时间并不长,次数还是比较多,实际查看了tomcat的服务器的cpu竟然只有2核,所以怀疑是tomcat的服务器的CPU比较少需要高强度的运算所以,数据库的等待比较多,导致内存不足,所以建议扩容了cpu的核数,

果然问题解决了,哎。不得不说经验很重要。。。。我还是太菜了。。。。。。

技术图片

 

记一次oracle内存分配不足,前端访问500报错,如何扩容oracle的memory_target内存

标签:http   app   nbsp   11g   内存管理   percent   个数   时间比较   virtual   

人气教程排行