[转帖]Oracle中有大量的sniped会话
https://www.cnblogs.com/abclife/p/15699959.html
|
1
2
3
4
5
6
7
|
SQL> select status ,count(*) from gv$session group by status;STATUS COUNT(*)-------- ----------KILLED 2SNIPED 6365ACTIVE 373INACTIVE 3648 |
|
1
2
3
4
5
6
7
8
9
10
|
SQL> select USERNAME,status,count(*) from v$session where USERNAME in ('ABCE','ABC_ABC') group by USERNAME,status order by 3;USERNAME STATUS COUNT(*)------------------------------ -------- ----------ABCE KILLED 2ABC_ABC ACTIVE 2ABC_ABC SNIPED 22ABC_ABC INACTIVE 40ABCE ACTIVE 51ABCE INACTIVE 1617ABCE SNIPED 3117 |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
SQL> select username,profile,initial_rsrc_consumer_group from dba_users where account_status='OPEN' and USERNAME in ('ABCE','ABC_ABC');USERNAME PROFILE INITIAL_RSRC_CONSUMER_GROUP------------------------------ ------------------------------ ------------------------------ABCE DEFAULT DEFAULT_CONSUMER_GROUPABC_ABC ABC_PROF DEFAULT_CONSUMER_GROUPSQL> select RESOURCE_NAME,LIMIT from dba_profiles where profile='ABC_PROF' and RESOURCE_NAME='IDLE_TIME';RESOURCE_NAME LIMIT-------------------------------- ----------------------------------------IDLE_TIME 600SQL> select RESOURCE_NAME,LIMIT from dba_profiles where profile='DEFAULT' and RESOURCE_NAME='IDLE_TIME';RESOURCE_NAME LIMIT-------------------------------- ----------------------------------------IDLE_TIME 50 |
这里idle_time的单位是分钟。
SNIPED状态的含义:
如果用户的profiles,或者在默认的profile中定义了idle_time,则以该用户登录的session在空闲一定时间后会变成sniped。即一个会话是inactive的,且inactive的时长超过了某个限制,比如profile中指定的idle_time时,这个会话的状态就会从inactive变为sinped。
数据库会kill掉这些会话(在v$session中状态显示为sniped),这些会话会逐渐被断开连接。但并不总是清理掉unix会话(即LOCAL=NO会话)。oracle资源会被释放,但是产生的shadow进程仍会保留(shadow进程仍然占用参数文件的进程总数的配额),操作系统资源不会被释放。直到用户再次尝试登录,数据库才会彻底清理掉该会话及操作系统上的连接。也就是说,如果客户端不发出SQL,则不能清理掉的SNIPED的会话及其使用的连接,它们仍然会占用着资源,这可能引起资源不足的报错,比如连接数达到最大的问题。
另一种方法就是强制断开连接(前提是通过sql*net连接进来的)。在sqlnet.ora文件中设置sqlnet.expire_time。设置后会强制关闭sql*net建立的会话。sqlnet.expire_time其实是另一种机制,主要目的用来检测dead的连接,而不是用于断开sniped的连接。不过expire_time是全局层面发挥作用,也就可以用于断开sniped的连接。(profile中的idle_time是针对特定用户的)
可以手工来清理这些SINPED会话及其所使用的连接。数据库连接方式为共享连接时,要小心不要把分配器进程或共享服务器进程也一并杀掉了。
|
1
|
select 'alter system kill session '''||sid||','||serial#||''' immediate;' from v$session where status='SNIPED' ; |
操作系统上kill进程:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
select to_char(a.logon_time, 'yyyy-mm-dd hh24:mi') logon_time, a.sql_id, a.event, a.username, a.osuser, a.process, a.machine, a.program, a.module, b.sql_text, b.LAST_LOAD_TIME, to_char(b.last_active_time, 'yyyy-mm-dd hh24:mi:ss') last_active_time, c.owner, c.object_name, a.last_call_et, a.sid, a.SQL_CHILD_NUMBER, c.object_type, p.PGA_ALLOC_MEM, a.p1, a.p2, a.p3, 'kill -9 ' || p.spid killstr, 'ps -ef|grep ' || p.spid || '|grep LOCAL=NO|awk ''{print $2}''|xargs kill -9' kill_sh from v$session a, v$sql b, dba_objects c, v$process p where a.status = 'SNIPED' --杀死会话状态,还可以是INACTIVE and p.addr = a.paddr and a.sql_id = b.sql_id(+) and a.wait_class = 'Idle' and a.sql_child_number = b.CHILD_NUMBER(+) and a.row_wait_obj# = c.object_id(+) and a.type = 'USER' order by a.sql_id, a.event; |
也可以用一下脚本,在OS层面kill进程:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#!/bin/shtmpfile=/tmp/.kill_snipedsqlplus system/manager <<EOFspool $tmpfileselect p.spid from v\$process p,v\$session swhere s.paddr=p.addrand s.status='SNIPED';spool offEOFfor x in `cat $tmpfile | grep "^[0123456789]"`do kill -9 $xdonerm $tmpfile |
创建job来kill会话:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
CREATE OR REPLACE PROCEDURE "KILL_SESSION"AS v_sid number; v_serial number; killer varchar2(1000); CURSOR cursor_session_info IS SELECT sid, serial# FROM v$session WHERE type != 'BACKGROUND' AND status = 'INACTIVE' AND last_call_et > 3600 AND username = 'ABCE' AND machine = 'test';BEGIN OPEN cursor_session_info; LOOP FETCH cursor_session_info INTO v_sid, v_serial; EXIT WHEN cursor_session_info%notfound; killer := 'alter system disconnect session ''' || v_sid || ',' || v_serial || ''' post_transaction immediate'; EXECUTE IMMEDIATE killer; END LOOP; dbms_output.PUT_LINE(cursor_session_info % rowcount || ' users with idle_time>2700s have been killed!'); CLOSE cursor_session_info;END;/ |
这样做其实还是治标不治本,最好能够解决连接池自动释放idle进程的问题
[转帖]Oracle中有大量的sniped会话的更多相关文章
- Oracle中有个tkprof来格式化oracle的trace文件
1.MySQL日志文件系统的组成2.慢查询日志3.慢查询日志演示long_query_time : 设定慢查询的阀值,超出次设定值的SQL即被记录到慢查询日志,缺省值为10sslow_query_lo ...
- [转帖]Oracle 12cR2使用经验
大规模升级来临,谈谈Oracle 12cR2使用经验 随着2019年2月13日,Oracle 19c (Oracle 12.2.0.3) for Exadata 版本发布,Oracle 12cR2体系 ...
- [转帖]Oracle字符集的查看与修改 --- 还未尝试 找个周六 试试.
Oracle 字符集的查看和修改 感谢原作者 改天试试 https://www.cnblogs.com/rootq/articles/2049324.html 一.什么是Oracle字符集 Oracl ...
- 如何定位Oracle数据库被锁阻塞会话的根源
首先再次明确下,数据库因为要同时保证数据的并发性和一致性,所以操作有锁等待是正常的. 只有那些长时间没有提交或回滚的事物,阻塞了其他业务正常操作,才是需要去定位处理的. 1.单实例环境 2.RAC环境 ...
- [转帖]Oracle 补丁体系(PSR/PSU/CPU) 及 opatch 工具 介绍
Oracle 补丁体系(PSR/PSU/CPU) 及 opatch 工具 介绍 原文:http://blog.csdn.net/tianlesoftware/article/details/58095 ...
- [转帖]Oracle 各个版本的升级路线图
从oracle 7开始(甚至更早版本)到oracle 9iR2. 来源: https://blog.csdn.net/cymm_liu/article/details/11647533 http:// ...
- [转帖]Oracle 裁员史:技术人死于重组,卒于云计算
Oracle 裁员史:技术人死于重组,卒于云计算 https://www.infoq.cn/article/tm-mcdHCPCI4eEwr6dbY 大厂裁员 我妈妈也总担心我没工作了 怎么还房贷 田 ...
- [转帖]oracle改版sql server问题点汇总
https://www.cnblogs.com/zhangdk/p/oracle_sqlserver.html 只记得 最开始的时候看过 没有具体的了解里面的特点 原作者总结的很好 留下来 以后说不定 ...
- 转帖 Oracle 主键的处理方法 http://www.cnblogs.com/Richardzhu/p/3470929.html
Oracle之主键的创建.添加.删除操作 一.创建表的同时创建主键约束 1.1.无命名 SQL> create table jack (id int primary key not null ...
- [转帖]Oracle 11G RAC For Windows 2008 R2部署手册
Oracle 11G RAC For Windows 2008 R2部署手册(亲测,成功实施多次) https://www.cnblogs.com/yhfssp/p/7821593.html 总体规划 ...
随机推荐
- 确定了-C#是2023年度的编程语言!
大家好,我是沙漠尽头的狼.在朋友圈看到桂素伟大佬发的喜讯截图,站长赶紧翻译向大家报喜,确定了-C#是2023年度的编程语言! 在TIOBE指数的历史上,C#首次获得了年度编程语言的奖项.祝贺!二十多年 ...
- C#有望成为2023年的编程语言之王
前言 TIOBE 2023年12月编程语言指数头条新闻:C#有望成为2023年的编程语言之王. TIOBE是什么? 访问地址:https://www.tiobe.com/tiobe-index/ TI ...
- Cesium中用到的图形技术——Horizon Culling
译者注:本文翻译自Cesium官方博文<Horizon Culling>,by KEVIN RING. 目录 地平线针对球体剔除一个点 平面测试 圆锥测试 推广到椭球 代码 预览 在开发像 ...
- 2021平(jia)凡(ban)的一年
0x00 刚刚把<平凡的世界>电视剧看完.也不知道什么原因,又去刷了一遍, 可能是有那么一段时间比较迷茫.加班加到怀疑人生了吧. 记得当年第一次看这本小说还是17年,好像是为了借一本什么书 ...
- 为什么程序猿DD热衷于内容输出与分享?
一.热衷于内容输出与分享 我是程序猿DD,大家知道我热衷于内容输出与分享.比如我一直有在产出博客或维护开源项目,是因为平时不沉迷游戏或追剧,空下来就喜欢整理整理最近碰到的问题,那么写写博客正好是一种比 ...
- 【华为云技术分享】STM32L476移植华为LiteOS系列教程(二)---开发前准备
在进行移植华为LiteOS开发工作之前,我们是需要提前做一些准备工作,如:开发工具.环境.源码等相关事宜. 一.准备开发工具 STM32CubeMX用于生成工程文件:STM32CubeMX下载地址 I ...
- Navicat 携手华为云GaussDB,联合打造便捷高效的数据库开发和建模工具方案
本文分享自华为云社区<Navicat 携手华为云GaussDB,联合打造便捷高效的数据库开发和建模工具方案>,作者: GaussDB 数据库 . 近日, Navicat Premium顺利 ...
- 华为云IoT智简联接,开启物联世界新纪元
摘要:华为云IoT将聚焦物联网技术和商业基础能力建设,联接万物.联接生态.联接行业,帮助各行各业做好数字化转型. 近日,华为云通过线上专题演讲发布了IoT最新战略.华为云IoT将聚焦物联网基础能力(包 ...
- 分布式缓存服务DCS:企业版性能更强,稳定性更高
摘要:企业版性能指标达到业界TOP1,行业领先30%,内核态实现真正多线程. 一.背景介绍 近年来,随着各行业业务需求急速增加,数据量和并发访问量呈指数级增长,原来只能依附于关系型数据库的传统&quo ...
- Excel 查找替换 -- 快速填充
单元格匹配,这样就不会把 70 的 0 替换成 7零 了 Ctrl + E 快速填充 一列变多行 快速填充 1. 快速拆分数据 一列数据中包含了姓名和手机号码,这时你需要进行数据拆分,快速填充可以实现 ...