您好、欢迎来到现金彩票网!
当前位置:一品彩票app下载 > 共享段 >

共享内存段异常引起查询慢的分析处理

发布时间:2019-04-26 05:39 来源:未知 编辑:admin

  事情的起因是系统的最终用户反映某些查询功能比较慢。简单地看了一下主机的负载以及数据库的性能状况,没发现什么异常,甚至可以说系统相当地轻闲。

  那问题出在哪?我首先观察到内存的使用率相当地高,达到99%。但是从操作上看,速度还没受到影响。不过很快想到,这个系统某些模块,用了短连接,难道是监听太慢引起的?这个库启了6个监听,分别TNSPING这几个监听,有个别监听非常慢,重启监听后,查询功能比较慢的问题得到解决。

  不过之前观察到的内存的异常使用引起了我极大的注意。这套系统,平时一般都会有几十G的空闲内存,不会达到这么高的。第一反应是用ipcs命令检查一下共享内存,发现有一个异常的共享内存段,占了60多G。

  为什么会出现这种情况?数据库可以确定是被重启过,询问客户这套系统的DBA,的确是在头一天出现了异常然后进行了重启。至于出现了什么样的异常,为什么要重启,这里不再深入。本文只讨论怎么样来清除这个异常的共享内存段。

  这是由于还有进程attach(理解为连接吧)到这个共享内存段上。只要找到这个进程被KILL之,就会解决问题。一种简单的方法是使用lsof来找到这些进程:

  不过简单的方法,不一定效率就高。这个系统光oracle server process就有5000个以上,lsof实在很慢。所以运行几分钟就直接放弃(因为以前在这套系统上运行过lsof命令,知道要输出完结果时间比较“漫长”)。

  OK, 手工找一下吧。从上面的ipcs输出的CTIME字段看到,正常的共享内存段是18:10左右创建的,而异常的是17:58左右创建的,那么attach到这个异常共享内存段的进程应该是在18点之前创建,而在17:58左右。首先使用”ps -ef grep defunct“,没有发现僵死进程。然后根据这样的条件,并且经过一系列筛选,得到下面的结果:

  oracle 22586 1 1 07:17:43 ? 0:31 oraclesidname (LOCAL=NO)

  oracle 28403 1 0 09:17:38 ? 0:02 oraclesidname (LOCAL=NO)

  oracle 22618 1 0 07:17:59 ? 0:00 oraclesidname (LOCAL=NO)

  oracle 7539 1 0 08:17:42 ? 0:10 oraclesidname (LOCAL=NO)

  oracle 7419 1 0 08:17:05 ? 0:00 oraclesidname (LOCAL=NO)

  oracle 22580 1 0 07:17:42 ? 0:36 oraclesidname (LOCAL=NO)

  oracle 7421 1 0 08:17:06 ? 0:06 oraclesidname (LOCAL=NO)

  oracle 7537 1 0 08:17:42 ? 0:02 oraclesidname (LOCAL=NO)

  oracle 7535 1 0 08:17:41 ? 0:00 oraclesidname (LOCAL=NO)

  oracle 21395 1 0 17:56:49 ? 0:01 oraclesidname (LOCAL=NO)

  oracle 22616 1 0 07:17:59 ? 0:00 oraclesidname (LOCAL=NO)

  oracle 20786 1 0 17:54:24 ? 0:10 oraclesidname (LOCAL=NO)

  oracle 22614 1 0 07:17:58 ? 0:00 oraclesidname (LOCAL=NO)

  oracle 7423 1 0 08:17:06 ? 0:18 oraclesidname (LOCAL=NO)

  [%/oracle]ps -ef grep oraclesidname grep 17: grep -v 18:17 grep -v 11:17

  oracle 22586 1 1 07:17:43 ? 0:31 oraclesidname (LOCAL=NO)

  oracle 28403 1 0 09:17:38 ? 0:02 oraclesidname (LOCAL=NO)

  oracle 22618 1 0 07:17:59 ? 0:00 oraclesidname (LOCAL=NO)

  oracle 7539 1 0 08:17:42 ? 0:10 oraclesidname (LOCAL=NO)

  oracle 7419 1 0 08:17:05 ? 0:00 oraclesidname (LOCAL=NO)

  oracle 22580 1 0 07:17:42 ? 0:36 oraclesidname (LOCAL=NO)

  oracle 7421 1 0 08:17:06 ? 0:06 oraclesidname (LOCAL=NO)

  oracle 7537 1 0 08:17:42 ? 0:02 oraclesidname (LOCAL=NO)

  oracle 7535 1 0 08:17:41 ? 0:00 oraclesidname (LOCAL=NO)

  oracle 21395 1 0 17:56:49 ? 0:01 oraclesidname (LOCAL=NO)

  oracle 22616 1 0 07:17:59 ? 0:00 oraclesidname (LOCAL=NO)

  oracle 20786 1 0 17:54:24 ? 0:10 oraclesidname (LOCAL=NO)

  oracle 22614 1 0 07:17:58 ? 0:00 oraclesidname (LOCAL=NO)

  oracle 7423 1 0 08:17:06 ? 0:18 oraclesidname (LOCAL=NO)

  看上去进程号为21395和20786的进程,正好满足前面提到的条件。KILL这两个进程,检查共享内存段,发现这个异常的共享内存段自动被清除。再检查内存的使用,内存的使用率也大幅下降,回到正常状态。

http://styleinch.com/gongxiangduan/74.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有