清理session的小插曲(二)

简介: 在上周巡检系统的时候发现session列表中显示有一个session的状态为“KILLED",当时没有太在意,等到周一回来做检查的时候,发现那个session的状态还是为KILLED. 这肯定是个问题,我们来看看这个session的情况。
在上周巡检系统的时候发现session列表中显示有一个session的状态为“KILLED",当时没有太在意,等到周一回来做检查的时候,发现那个session的状态还是为KILLED.
这肯定是个问题,我们来看看这个session的情况。从v$session里可以看出这个session最早是在7月8日初始化的。

SQL>  select sid,serial#,status,logon_time ,paddr from v$session where status='KILLED';
       SID    SERIAL# STATUS           LOGON_TIME          PADDR
---------- ---------- ---------------- ------------------- ----------------
       979      64731 KILLED           2015-07-08 17:51:23 000000174114A1D8
查看一些客户端的明细信息,可以看到,是通过sqlplus直接连过来的,从客户端信息来看是一个监控客户端。
USERNAME             PROGRAM                                            OSUSER               MACHINE              STATUS                  SID
-------------------- -------------------------------------------------- -------------------- -------------------- ---------------- ----------
MIN_BG      sqlplus@xxxxxx (TNS V1-V3)                     xxxxx                   xxxxxxxxxx           KILLED                  979
这个时候尝试去看看这个session在killed的时候正在执行什么sql语句。没有任何信息。       
select sql_id from v$session where paddr='000000174114A1D8' and sql_id is not null 

好了问题的情况就是这样,之前也分享过几篇关于kill session的博文,比如http://blog.itpub.net/23718752/viewspace-1485804/
那个问题是通过查看操作系统进程来查看对应的session信息。
这个问题不太一样,因为我们只知道session的信息,需要找到绑定的操作系统进程。
有一个思路可以参考,我们根据操作系统进程的初始化时间来查看7月8日的数据相关进程。发现只有2个。这对我们分析问题的范围来说就更小了。
$ ps -ef|grep Jul08
oracle     781     1  0 Jul08 ?        00:00:00 oracletlbb3dbi (LOCAL=NO)
oracle   12172 10679  0 10:29 pts/0    00:00:00 grep Jul08
oracle   36470     1  0 Jul08 ?        00:00:00 oracletlbb3dbi (LOCAL=NO)
所以这两个进程中应该有一个就是需要清理的进程。
我们看看781这个进程。可以看到v$session里的paddr和v$process里的addr还是完全对应的,证明这个session是没有问题的。
$ ksh showpid.sh 781
*******************************************
Process has found, pid: 781  ,  addr: 00000017310538B8    
####### Process Information from OS level as below ########
oracle     781     1  0 Jul08 ?        00:00:00 oraclexxxxx (LOCAL=NO)
oracle    5781     1  0 Jun29 ?        00:00:30 oraclexxxxx (LOCAL=NO)
oracle   12210 10679  0 10:29 pts/0    00:00:00 ksh showpid.sh 781
##############################################
       SID    SERIAL# USERNAME        OSUSER          MACHINE              PROCESS         TERMINAL        TYPE
---------- ---------- --------------- --------------- -------------------- --------------- --------------- --------------------
LOGIN_TIME
--------------------------------------
      1409      27981 MIN_BG xxxxx xxxxxxxx           20646           pts/26          USER
2015-07-08 14:58:29
PREV_SQL_ID                    SQL_TEXT
------------------------------ ------------------------------------------------------------
548447mzsjars                  select * from v$version
那么问题就到了第二个session,通过地址映射找不到对应的进程。
$ ksh showpid.sh 36470
*******************************************
Process has found, pid: 36470  ,  addr: 00000017410A2318    
####### Process Information from OS level as below ########
oracle   12251 10679  0 10:29 pts/0    00:00:00 ksh showpid.sh 36470
oracle   36470     1  0 Jul08 ?        00:00:00 oraclexxxxxx (LOCAL=NO)
##############################################
no rows selected
no rows selected

我们手工来理一下这个问题。首先我们知道操作系统级进程,进程号为36470,对应的地址信息为:
SQL> select addr from v$process where spid=36470;
ADDR
----------------
00000017410A2318
我们根据这个地址信息在v$session没有任何收获,所以从v$session映射v$process还是从v$process映射v$session都是断开的链条。
SQL> select sid,serial#,username from v$session where paddr='00000017410A2318';
no rows selected
可以基本断定36470这个进程就是存在问题的进程。
简单和同事进行了确认,然后在操作系统级清理了这个进程。
kill -9 36470
隔了一会,再次查看session,原来显示KILLED状态的session就自动消失了。
$ ps -ef|grep Jul08
oracle     781     1  0 Jul08 ?        00:00:00 oraclexxxxxx (LOCAL=NO)
oracle   15481 10679  0 10:39 pts/0    00:00:00 grep Jul08
通过这个案例可以看出,我们在清理这种进程的时候还是省了不少事情,从操作系统进程的初始化时间缩小了问题分析的范围。然后也是逐个排查,正向反向进行印证,可以基本断定这个存在问题的进程。
所以作为问题总结,还是建议在删除session的时候还是最好先标示一下绑定的操作系统进程,这样就给事后的处理带来很多的便捷。
目录
相关文章
|
3天前
|
云安全 数据采集 人工智能
古茗联名引爆全网,阿里云三层防护助力对抗黑产
阿里云三层校验+风险识别,为古茗每一杯奶茶保驾护航!
古茗联名引爆全网,阿里云三层防护助力对抗黑产
|
3天前
|
存储 机器学习/深度学习 人工智能
大模型微调技术:LoRA原理与实践
本文深入解析大语言模型微调中的关键技术——低秩自适应(LoRA)。通过分析全参数微调的计算瓶颈,详细阐述LoRA的数学原理、实现机制和优势特点。文章包含完整的PyTorch实现代码、性能对比实验以及实际应用场景,为开发者提供高效微调大模型的实践指南。
471 1
kde
|
3天前
|
人工智能 关系型数据库 PostgreSQL
n8n Docker 部署手册
n8n是一款开源工作流自动化平台,支持低代码与可编程模式,集成400+服务节点,原生支持AI与API连接,可自托管部署,助力团队构建安全高效的自动化流程。
kde
320 3
|
2天前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段四:学术分析 AI 项目 RAG 落地指南:基于 Spring AI 的本地与阿里云知识库实践
本文介绍RAG(检索增强生成)技术,结合Spring AI与本地及云知识库实现学术分析AI应用,利用阿里云Qwen-Plus模型提升回答准确性与可信度。
220 91
AI 超级智能体全栈项目阶段四:学术分析 AI 项目 RAG 落地指南:基于 Spring AI 的本地与阿里云知识库实践
|
4天前
|
传感器 人工智能 算法
数字孪生智慧水务系统,三维立体平台,沃思智能
智慧水务系统融合物联网、数字孪生与AI技术,实现供水全流程智能监测、预测性维护与动态优化。通过实时数据采集与三维建模,提升漏损控制、节能降耗与应急响应能力,推动水务管理从经验驱动迈向数据驱动,助力城市水资源精细化、可持续化管理。
279 143
|
18天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
7天前
|
人工智能 移动开发 自然语言处理
阿里云百炼产品月刊【2025年9月】
本月通义千问模型大升级,新增多模态、语音、视频生成等高性能模型,支持图文理解、端到端视频生成。官网改版上线全新体验中心,推出高代码应用与智能体多模态知识融合,RAG能力增强,助力企业高效部署AI应用。
350 1