设为首页 收藏本站
查看: 481|回复: 0

[经验分享] Oracle内存管理(之七)

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-7-28 09:13:43 | 显示全部楼层 |阅读模式
【深入解析--eygle】 学习笔记

1.5 Oracle的内存分配在为Oracle规划内存使用时,我们必须清楚,如果Oracle耗用的内存过高,甚至超过了系统的物理内存,那么系统的性能就会受到严重的影响,当系统执行任务时,如果没有足够的内存,那么系统就会进行分页或交换,以完成当前活动事务。

当系统执行分页时,会将当前没有使用的信息从内存转移到硬盘上,这样就可以为当前需要内存的程序分配内存。如果频繁发生分页,系统性能就会严重降低,从而导致很多程序的执行时间变长。

当系统执行交换时,会将某些进程所分配的不活跃内存页(根据LRU算法)从内存转移到硬盘上,这样另一个活动进程就可以得到所需要的内存。交换基于系统循环时间。如果交换太过频繁,系统甚至会出现当机。

1.5.1 示例1,SGA与swap
描述:用户报告,服务器启动一段时间以后,无法建立数据库连接。重新启动几分钟以后,再次无法连接。

操作系统:REHL 5.8,系统无法正常使用.

1. 登陆数据库,检查系统进程

登陆系统,检查系统进程,发现后台进程正常,有一定量的用户连接:

[iyunv@felix kernel]# ps  -ef | grep oraoracle 25269 25258 0 13:58:36 pts/30:00 grep ora
oracle 25267 1 1 13:58:34 ? 0:00 oracleFELIX(LOCAL=NO)
oracle 25193 1 0 13:57:03 ? 0:01 oracleFELIX(LOCAL=NO)
oracle 25209 1 0 13:57:09 ? 0:00 oracleFELIX(LOCAL=NO)
oracle 25244 1 1 13:58:23 ? 0:00 oracleFELIX(LOCAL=NO)
oracle 25218 1 0 13:57:23 ? 0:00 oracleFELIX(LOCAL=NO)
...............
oracle 25149 1 0 13:56:41 ? 0:01 ora_lgwr_FELIX
oracle 25153 1 0 13:56:42 ? 0:01 ora_smon_FELIX
oracle 25155 1 0 13:56:42 ? 0:00 ora_reco_FELIX
oracle 25151 1 0 13:56:41 ? 0:00 ora_ckpt_FELIX
oracle 25145 1 0 13:56:41 ? 0:00 ora_dbw0_FELIX
oracle 25143 1 0 13:56:41 ? 0:00 ora_pmon_FELIX


2. 检查警报日志文件

发现如下大量提示信息:
Tue Mar 23 13:40:45 2004
skgpspawn failed:category = 27142, depinfo = 12,op = fork, loc = skgpspawn3
skgpspawn failed:category = 27142, depinfo = 12,op = fork, loc = skgpspawn3

该提示说明系统无法fork新的数据库进程,数据库无法spawn a new session:
而且这里  "skgpspawn failed:category = 27142"实际上应该是Oracle的错误号,我们可以通过Oracle的手册查询到这个错误的具体内容,在Unix/Linux上我们可以通过oerr工具获得相关的信息:

[oracle@felix ~]$ oerr ora 27142
27142, 0000, "could not create newprocess"
// *Cause: OS system call
// *Action: check errno and if possible increasethe number of processes
[oracle@felix ~]$

3. 尝试连接数据库

当再次尝试连接数据库时,收到如下错误信息,无法连接数据库:
$ sqlplus "/ assysdba"
SQL*Plus: Release9.2.0.3.0 - Production on 星期二 3月 23 14:14:06 2004
Copyright (c) 1982,2002, Oracle Corporation. All rights reserved.
ERROR:
ORA-12540: TNS: 超出内部限制
请输入用户名:
ERROR:
ORA-12540: TNS: 超出内部限制
请输入用户名:
ERROR:
ORA-12540: TNS: 超出内部限制
SP2-0157: 在3次尝试之后无法 CONNECT 到ORACLE, 退出 SQL*Plus

内部限制超过,通常说明某些系统资源不足.

4. 检查系统日志

检查系统日志信息,发现大量失败的su操作,有swap区不足的报告:
用命令demsg检查系统日志:

[oracle@felix ~]$ dmesg
Mar 23 13:46:26 wapplatform genunix: [ID 470503kern.warning] WARNING: Sorry, no swap space
to grow stack for pid 24888
(sqlplus)
Mar 23 13:54:08 wapplatform genunix: [ID 470503kern.warning] WARNING: Sorry, no swap space
to grow stack for pid 25036 (su)
现在基本可以判断是交换区的问题,当然和OracleSGA设置有关。

5. 检查系统内存及交换区使用

通过TOP工具检查系统内存及Swap使用情况:

Memory:1024M  real, 34M free, 752M swap in use,10M swap free

发现物理内存仅为1G,free部分为34M,交换区使用了752M,仅Swap Free部分仅余10M 。由此我们知道系统内存严重不足,Swap区不足。

6. 检查数据库的SGA设置

发现为600M,SGA设置过大。

7. 调整内容

第一步调整,减小SGA,为系统保留足够的内存。

第二步调整,为系统增加swap区。
如何增加swap分区大小:

1.   首先用命令free查看系统内 Swap 分区大小。

[oracle@felix ~]$ free -m
            total       used       free    shared    buffers    cached
Mem:          996        890        106          0        104        442
-/+ buffers/cache:        342        654
Swap:        2047          5       2042
[oracle@felix ~]$


2.      创建一个 Swap 文件

[iyunv@felix ~]# mkdir swap
[iyunv@felix ~]# cd swap


[iyunv@felix swap]# sudo  ddif=/dev/zero of=swapfile1 bs=1024count=100000
100000+0 records in
100000+0 records out
102400000 bytes (102 MB)copied, 0.887794 s, 115MB/s

出现下列提示,上面命令中的 count 即代表swap文件大小。


把生成的文件转换成 Swap 文件:

[iyunv@felix swap]# sudo swaponswapfile1


4,激活swap文件:

[iyunv@felix swap]# free -m
            total       used       free    shared    buffers    cached
Mem:          996        900         96          0         44        510
-/+ buffers/cache:        345        651
Swap:        2194          6       2188


总数:分配了 623160k 字节 + 保留 162704k = 已使用785864k,1010936k 可用至此系统恢复正常,问题解决




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-22745-1-1.html 上篇帖子: Oracle内存管理(之六) 下篇帖子: 在unix/linux中使用文件描述符(File Descriptors)来找回被删掉的文件(数据文件or redo log) Oracle
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表