[20171120]理解v$session的state字段(11G).txt
[20171120]理解v$session的state字段(11G).txt
--//https://blogs.oracle.com/database4cn/vsession-%e4%bd%a0%e7%9c%8b%e5%88%b0%e7%9a%84event%e7%9c%9f%e7%9a%84%e6%98%afsession%e5%bd%93%e5%89%8d%e7%9a%84%e7%ad%89%e5%be%85%e4%ba%8b%e4%bb%b6%e4%b9%88-v2
--//v$session - 你看到的event真的是session当前的等待事件么?
--//我重复测试,其内容直接转抄作者的链接:
SCOTT@book> @ ver1
PORT_STRING VERSION BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
--//sesson 1:
SCOTT@book> @ &r/spid
SID SERIAL# PROCESS SERVER SPID PID P_SERIAL# C50
---------- ---------- ------------------------ --------- ------ ------- ---------- --------------------------------------------------
274 5 53785 DEDICATED 53786 21 3 alter system kill session '274,5' immediate;
--//记下sid=274.
SCOTT@test01p> exec loop null; end loop;
--//死循环.
--//sesson 2:
SCOTT@book> @ &r/wait
no rows selected
--//嗯,没有输出,看来我的检测脚本要修改看看.
SCOTT@book> select sid,serial#,status,sql_id,event,seq# from v$session where sid=274;
SID SERIAL# STATUS SQL_ID EVENT SEQ#
---------- ---------- -------- ------------- ---------------------------------------- ----------
274 5 ACTIVE 61bj68pvygxvz SQL*Net message from client 40
SCOTT@book> @ &r/sqlid 61bj68pvygxvz
SQL_ID SQLTEXT
------------- --------------------------------
61bj68pvygxvz BEGIN loop null; end loop; END;
您会发现以上这个session竟然会在 "等待" SQL*Net message from client,并且status为ACTIVE,大家都知道SQL*Net message from
client是一个空闲等待,代表server process正在等待client发出下一个sql指令。
接下来观察以上以上进程的CPU消耗情况,会发现它在持续的ON CPU
$ top -p 53786 -b
top - 11:03:32 up 711 days, 2:26, 1 user, load average: 1.21, 0.62, 0.37
Tasks: 1 total, 1 running, 0 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.2%us, 1.0%sy, 0.0%ni, 98.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 132261196k total, 113979744k used, 18281452k free, 1122908k buffers
Swap: 31455264k total, 2300k used, 31452964k free, 108723604k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
53786 oracle 20 0 849m 27m 23m R 99.8 0.0 2:07.03 oracle
--//它几乎消耗了一个的CPU.
那么问题来了,这个如此烧CPU的死循环session怎么会是处于空闲等待?答案是我们忽略了v$session.state这个非常重要的列。
一个session的状态要么是在等待,要么是在ON CPU,v$session.state这个列可以判断这个状态。有且只有v$session.state='WAITING'
的时候,才代表这个session当前正在等待这个event,否则代表这个session在ON CPU,并且观察到的event只是进程在ON CPU之前的最后
一个等待。
接下来我们将以上用于查询session等待的SQL改一下,添加上v$session.state这个列:
SCOTT@book> select sid,serial#,status,state,sql_id,event,seq# from v$session where sid=274;
SID SERIAL# STATUS STATE SQL_ID EVENT SEQ#
---------- ---------- -------- ------------------- ------------- ---------------------------------------- ----------
274 5 ACTIVE WAITED KNOWN TIME 61bj68pvygxvz SQL*Net message from client 40
可见STATE的值为"WAITED KNOWN TIME",不是"WAITING",这表明这个session当前在ON CPU,"SQL*Net message from client"只是这个
session在ON CPU之前的最后一个等待。因此当您查询v$session观察session的等待事件的时候,一定不要忘了v$session.state这个关键
列。
--//看来给修改我的检测脚本:
select p1raw,p2raw,p3raw,p1,p2,p3,sid,serial#,seq#,event,state,wait_time_micro,seconds_in_wait
from v$session where wait_class<>'Idle'
and sid not in (select sid from v$mystat where rownum=1)
order by event ;
--//修改如下:
select p1raw,p2raw,p3raw,p1,p2,p3,sid,serial#,seq#,event,status,state,wait_time_micro,seconds_in_wait
from v$session where ( wait_class<>'Idle' or (status='ACTIVE' and STATE='WAITED KNOWN TIME'))
and sid not in (select sid from v$mystat where rownum=1)
order by event ;
SCOTT@book> @ &r/wait
P1RAW P2RAW P3RAW P1 P2 P3 SID SERIAL# SEQ# EVENT STATUS STATE WAIT_TIME_MICRO SECONDS_IN_WAIT
---------------- ---------------- ---------------- ---------- ---------- ---------- ---------- ---------- ---------- ---------------------------------------- -------- ------------------- --------------- ---------------
0000000062657100 0000000000000001 00 1650815232 1 0 274 5 40 SQL*Net message from client ACTIVE WAITED KNOWN TIME 15932642 357
[20171120]理解v$session的state字段(11G).txt的更多相关文章
- [转载]深入理解HTTP Session
深入理解HTTP Session session在web开发中是一个非常重要的概念,这个概念很抽象,很难定义,也是最让人迷惑的一个名词,也是最多被滥用的名字之一,在不同的场合,session一次的 ...
- [serverlet][转载: 深入理解HTTP Session]
[serverlet][转载: 深入理解HTTP Session] 标签(空格分隔): 未分类 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任. ...
- 深入理解HTTP Session
深入理解HTTP Session session在web开发中是一个非常重要的概念,这个概念很抽象,很难定义,也是最让人迷惑的一个名词,也是最多被滥用的名字之一,在不同的场合,session一次的 ...
- [20190219]那个更快(11g).txt
[20190219]那个更快(11g).txt --//前几天测试11g Query Result Cache RC Latches时,链接http://blog.itpub.net/267265/v ...
- [20180316]理解db file parallel read等待事件.txt
[20180316]理解db file parallel read等待事件.txt --//一直对db file parallel read等待事件不理解,因为在实际系统中很少遇到这样的等待事件. S ...
- [20180819]关于父子游标问题(11g).txt
[20180819]关于父子游标问题(11g).txt --//sql语句存在父子游标,子游标堆6在父游标堆0里面.--//如果存在许多子游标的情况下,父游标堆0是否大小是发生变化呢.测试看看.--/ ...
- [20170612]FOR ALL COLUMNS SIZE repeat(11g).txt
[20170612]FOR ALL COLUMNS SIZE repeat(11g).txt --//昨天看了https://jonathanlewis.wordpress.com/2017/06/0 ...
- [20171211]ora-16014 11g.txt
[20171211]ora-16014 11g.txt --//上午测试了10g下备库log_archive_dest_1参数配置VALID_FOR=(ONLINE_LOGFILES,ALL_ROLE ...
- 理解HTTP session原理及应用
转自:http://www.2cto.com/kf/201206/135471.html 一.术语session在我的经验里,session这个词被滥用的程度大概仅次于transaction,更加有趣 ...
随机推荐
- canvas与webgl坐标转换
1 canvas的坐标系 坐标原点在左上角,横轴向右为X轴正方向,竖直向下为Y轴正方向 2 webgl的坐标系 坐标原点在绘图区域的中心点,横向右为X轴正方向,竖直向上为Y轴正方向,横纵坐标区域范围为 ...
- [EXP]McAfee ePO 5.9.1 - Registered Executable Local Access Bypass
# Exploit Title: McAfee ePO 5.9.1 Registered Executable Local Access Bypass # Date: 2019-03-07 # Exp ...
- Java开发技术大揭底——让你认知自己技术上的缺陷,成为架构师
一.分布式架构体系 分布式怎么来的.传统的电信.银行业,当业务量大了之后,普通服务器CPU/IO/网络到了100%,请求太慢怎么办?最直接的做法,升级硬件,反正也不缺钱,IBM小型机,大型机,采购了堆 ...
- C# winform嵌入unity3D
最近做项目需要winform嵌入unity的功能,由于完全没接触过这类嵌入的于是在网上搜,有一种方法是UnityWebPlayer插件,也开始琢磨了一段时间,不过一会发现在5.4版本以后这个东西就被淘 ...
- Spring Boot - 修改Tomcat默认的8080端口
前言 默认情况下,Spring Boot内置的Tomcat服务会使用8080端口启动,我们可以使用以下任何技巧去更改默认的Tomcat端口: 注:我们可以通过server.port=0配置,去自动配置 ...
- salesforce lightning零基础学习(八) Aura Js 浅谈一: Component篇
我们在开发lightning的时候,常常会在controller.js中写 component.get('v.label'), component.set('v.label','xxValue'); ...
- Linux 安装 JDK
本篇博客用于记录一下在 Linux 系统下安装 Java 环境. 在大部分的 Linux 系统中都有安装 Open JDK,所以最好是先卸载 Open JDK 后在进行我们的 JDK 安装.Open ...
- 使用 libjpeg 库解压数据示例
static int MjpegDecompress( *** ) { struct jpeg_decompress_struct tDInfo; struct jpeg_error_mgr jerr ...
- drupal简单安装和插件安装
1.从官网下载drupal安装包:https://www.drupal.org/download 2.windows下使用WAMPSERVER作为php的服务器,在官网http://www.wamps ...
- DDD初探
领域驱动设计(DDD)对开发者来说是面向对象设计的自然进化 总的来说DDD包括两个部分: 分析部分 分析部分通常是由开发人员去和领域专家沟通业务知识,但是开发人员和领域专家是有代沟的, 为了简化沟通成 ...