博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
清理session的小插曲
阅读量:6432 次
发布时间:2019-06-23

本文共 3610 字,大约阅读时间需要 12 分钟。

前几天在做一次巡检的时候,通过top发现有3个进程占用的时间很长,之前也碰到过几次这种情况,但是排查发现是由于监控程序在运行,算是虚惊一场。
今天看到这些进程的情况,还是不能掉以轻心。
   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                                                        
  2249 xxxxxxxx  25   0 36.5g 3.0g  74m R 100.0  0.9   8949:04 oracleCUST01 (LOCAL=NO)                                                                                                                                                       
  6579 xxxxxxxx  25   0 36.5g 3.1g  50m R 99.5  0.9   8938:02 oracleCUST01 (LOCAL=NO)                                                                                                                                                                                                                    
  9042 xxxxxxxx  25   0 36.5g 3.1g  28m R 99.5  0.9   8934:51 oracleCUST01 (LOCAL=NO) 
先抓出来一个进程,看看到底在干嘛?
>ksh showpid.sh 2249
*******************************************
Process has found, pid: 2249  ,  addr: 000000089856DEA0    
####### Process Information from OS level as below ########
xxxxxxxx    2249     1 99 Mar26 ?        6-05:09:50 oracleCUST01 (LOCAL=NO)
xxxxxxxx   3137 23569  0 16:45 pts/7    00:00:00 ksh showpid.sh 2249
##############################################
       SID    SERIAL# USERNAME        OSUSER          MACHINE              PROCESS         TERMINAL        TYPE       LOGIN_TIME
---------- ---------- --------------- --------------- -------------------- --------------- --------------- ---------- -------------------
      4471      62525    DB_PRSNL      XXXX            XXXX\LSG_P10-KETNAP  5360:2832       LSG_P10-KETNAP  USER       2015-03-26 11:31:52
发现是一个开发人员通过客户端发起的一个查询。这个查询竟然运行了这么长时间。
查看pmon进程的占用时间,已经持续很长时间了。
>  ps -ef|grep pmon
xxxxxx    4904     1  2 Feb20 ?         1-00:04:58 ora_pmon_CUST01
这是个很明显的问题,发邮件给客户开发组进行确认,马上得到了反馈,可以Kill这个session.
但是客户dba在kill的时候,运行了alter system kill session报了
ORA-00031: session marked for kill
查看v$session的状态,发现这几个session都是KILLED状态,看情况就是等待这几个session被清理了。
一个小时之后,我想查看一下这几个session是否已经被清理,发现没有任何变化。
关于kill session其实还有几种选项可用,我们可以使用kill session immediate,disconnect session  immediate
kill session 命令不会马上清理掉session,在做回滚操作的时候会进行等待,暂时将session标记为KILLED状态,如果使用kill session immediate就有点类似java中进行垃圾回收一样,我们显式声明system.gc(),但是不一定马上进行回收。
进行disconnect session immediate这种方式会kill掉专用服务连接进程,算是杀伤力较大的一种方式。
但是
实际操作的时候发现还是有一定的差距,因为三种方式都不奏效。
SQL>  alter system kill session '4471,62525';
 alter system kill session '4471,62525'
*
ERROR at line 1:
ORA-00031: session marked for kill
SQL> alter system kill session '4471,62525' immediate;
alter system kill session '4471,62525' immediate
*
ERROR at line 1:
ORA-00031: session marked for kill
SQL>  ALTER SYSTEM DISCONNECT SESSION '4471,62525' IMMEDIATE;  
 ALTER SYSTEM DISCONNECT SESSION '4471,62525' IMMEDIATE
*
ERROR at line 1:
ORA-00031: session marked for kill
这种情况就跟催有些起床困难户起床一样,一波波人赶过去,都败下阵来。
过了一会儿,查看session还是没有任何变化。这个时候只能从操作系统级进行清理了。
不过在清理之前,还是需要先验证一下是否这几个session在做相关的rollback操作。
SET LINESIZE 200
COLUMN username FORMAT A15
 
SELECT s.username,
      s.sid,
      s.serial#,
      t.used_ublk,
      t.used_urec,
      rs.segment_name,
      r.rssize,
      r.status
FROM  v$transaction t,
      v$session s,
      v$rollstat r,
      dba_rollback_segs rs
WHERE s.saddr = t.ses_addr
AND   t.xidusn = r.usn
AND   rs.segment_id = t.xidusn
ORDER BY t.used_ublk DESC;                                                                                                                                                      
  
USERNAME               SID    SERIAL#  USED_UBLK  USED_UREC SEGMENT_NAME                       RSSIZE STATUS         
  --------------- ---------- ---------- ---------- ---------- ------------------------------ ---------- ---------------
  DBAPPUSER              24787       9155          5        207 _SYSSMU94_2377138680$          1513996288 ONLINE         
  DEVTEST           25083        169          3        181 _SYSSMU9_3265824918$           1601298432 ONLINE         
  USER_ACCOUNT         3185       2609          3         30 _SYSSMU91_864415611$           1604444160 ONLINE         
  DBAPPUSER               5803      28753          3        132 _SYSSMU98_2193874896$          1584521216 ONLINE         
  DBAPPUSER                372       1053          3         36 _SYSSMU263_2805064819$         1732501504 ONLINE         
没有发现相关的rollback
在操作系统级进行清理,马上就处理掉了。查看sid为4471的session,发现已经被其它用户使用了。这个问题的解决就告一段落。
       SID    SERIAL# USERNAME        OSUSER          MACHINE              PROCESS         TERMINAL        TYPE       LOGIN_TIME          STATUS
---------- ---------- --------------- --------------- -------------------- --------------- --------------- ---------- ------------------- --------
      4471      62529 SECCAPP xxxxx ccbappr13            1234            unknown         USER       2015-04-01 16:51:21 INACTIVE
可见这个问题不能掉以轻心,最好还是验证一下session是否已经被清理干净,否则这些资源会一直得不到释放,对系统还是有一定的影响。

转载地址:http://jtaga.baihongyu.com/

你可能感兴趣的文章
Typesafe公司正式更名为Lightbend公司
查看>>
用户吐槽:Azure DevOps CI 体验太差
查看>>
微服务之旅的经验分享
查看>>
C# 7.3新特性一览
查看>>
刚刚,阿里发布AI谣言粉碎机,识别准确率达81%
查看>>
准备好了?测试人员迟早会被要求测试包含区块链技术的解决方案
查看>>
IntelliJ IDEA宣布对Java 9的支持情况
查看>>
从ABC+IOT到ABC anywhere,百度边缘计算的进击之路
查看>>
十年•杭研大咖说|尧飘海:构建容器云平台的关键技术
查看>>
解读微软开源MMLSpark:统一的大规模机器学习生态系统
查看>>
伯克利开源Confluo:吞吐量比Kafka高4到10倍
查看>>
12个javaScript技巧
查看>>
中国移动与今日头条合作:疯狂为5G铺路
查看>>
lazy.js 惰性求值实现分析
查看>>
刚刚开源的Python静态类型检查器:Pyright
查看>>
2019年,人工智能领域有哪些突破值得期待?
查看>>
2018 年全球金融科技发明专利排行榜 TOP20:中国企业有6家
查看>>
JSP
查看>>
用Chrome开发者工具调试一切
查看>>
简易mvvm库的设计实现
查看>>