关于read by other session跟cr request retry的问题

今天有个同事说有张表通过索引可以查出指定的数据,如果走全表扫描等上非常久也跑不出数据,加rownum<3这样的也出不来,我去看了后台的$session_wait,event事件是read by other session,看到这种情况后,我去另外一台(两台RAC的)看了一下,另外一台关于这张表的等待事件是cr request retry,这个是什么问题,我无从入手,第一次碰到,请教有经验的大哥、大姐们一下。谢谢

1个回答

[code="java"]ODS系统比较慢,要求诊断一下,给ODS系统做了AWR。首先交代一下ODS环境:

  (1)环境:RedHat 5.1+Oracle10.2.0.4 RAC(两节点)

  (2)现象:系统异常慢

  由于当时质疑人资管控系统数据库有问题,而人资管控系统是在节点2实例上,所以查看节点2实例的top5等待事件:

  节点2:

Top 5 Timed Events Avg %Total
~~~~~~~~~~~~~~~~~~ wait Call
~~~~~~~~~~~~~~~~~~ wait Call
Event Waits Time (s) (ms) Time Wait Class
Event Waits Time (s) (ms) Time Wait Class



gc buffer busy 2,346,848 24,567 10 33.2 Cluster
gc buffer busy 2,346,848 24,567 10 33.2 Cluster
read by other session 1,941,773 18,734 10 25.3 User I/O
read by other session 1,941,773 18,734 10 25.3 User I/O
db file scattered read 673,646 10,209 15 13.8 User I/O
db file scattered read 673,646 10,209 15 13.8 User I/O
CPU time 6,627 9.0
CPU time 6,627 9.0
log file sync 129,112 4,068 32 5.5 Commit
log file sync 129,112 4,068 32 5.5 Commit

  从top 5 event来看,主要是read类型的event比较多

  db file sequential read 顺序读导致

  gc buffer busy 产生的根本原因是Oracle 的cache fusion机制,简单来说cache fusion的主要目的

  1、减少各个节点对数据库的读写,提交效率,内存之间的数据同步要比磁盘到内存快很多

  2、保持数据的完整性,当某个节点执行查询时首先在本节点buffer中是否存在,如果不存在就会到另外节点buffer去查找,

  如果存在大量的cache交换就会产生gc buffer busy

  3、read by other session

  When information is requested from the database, Oracle will first read the data from disk into the database buffer cache.

  If two or more sessions request the same information, the first session will read the data into the buffer cache while other sessions wait.

  In previous versions, this wait was classified under the "buffer busy waits" event.

  However, in Oracle 10.1 and higher, this wait time is now broken out into the "read by other session" wait event.

  Excessive waits for this event are typically due to several processes repeatedly reading the same blocks,

  e.g. many sessions scanning the same index or performing full table scans on the same table.

  Tuning this issue is a matter of finding and eliminating this contention.

  该event是10.1以后新引入的,之前归类于buffer busy waits,Oracle对event的划分越来越细,

  产生原因:对同一个索引进行的大量扫描或对同一个表进行全表扫描

  查询等待的文件

  SELECT p1 "file#", p2 "block#", p3 "class#"
  FROM v$session_wait
  WHERE event = 'read by other session';

  查询热点块对应的对象

  SQL> SELECT relative_fno, owner, segment_name, segment_type
  FROM dba_extents
  WHERE file_id = &file
  AND &block BETWEEN block_id AND block_id + blocks - 1

  查看Top Sql 发现如下比较可疑,单次执行要花费20多分钟,

  查看表的索引无异常,查看执行计划是index range scan,貌似没有问题

  该表的数据量比较大且变化比较频繁,怀疑是由于索引引起的热点块,于是将其改为

  全表扫描,这样可以避免索引的热点块产生

  经过一段时间观察系统正常

  SQL ordered by Elapsed Time DB/Inst: BILLBJ/billbj1 Snaps: 15955-15956
  -> Resources reported for PL/SQL code includes the resources used by all SQL
  statements called by the code.
  -> % Total DB Time is the Elapsed Time of the SQL statement divided
  into the Total Database Time multiplied by 100
  Elapsed CPU Elap per % Total
  Time (s) Time (s) Executions Exec (s) DB Time SQL Id
  ---------- ---------- ------------ ---------- ------- -------------
  10,435 709 8 1304.3 66.8 5uc64k11j23wx
  Module: JDBC Thin Client
  select a.day day,sum(a.data) data,sum(a.indata) indata from bandwidth_d
  ailytable a where a.day between :v_start_date and :v_end_date and a.channelId
  in (select * from the (select cast(:v_channelId as channelIdArray) from dual))
  and a.nodeId in (select * from the (select cast(:v_nodeId as nodeIdArray) from d

  有时候产生同一个问题的几个原因可能是相悖的,比如read by other session,所以我们不能局限于某一个方面,此案例中db file sequential read wait也说明顺序读等待过多,最后的解决方法也说明查询未必适用索引就好。

  其实read by other session等待事件是要解决热点块问题,而解决热点块问题首先要减低IO次数,我们来看看IO情况:

~~~~~~~~~~~~ Per Second Per Transaction
~~~~~~~~~~~~ Per Second Per Transaction
--------------- ---------------
--------------- ---------------
Redo size: 28,546.06 881.39
Redo size: 28,546.06 881.39
Logical reads: 37,292.67 1,151.45
Logical reads: 37,292.67 1,151.45
Block changes: 151.32 4.67
Block changes: 151.32 4.67
Physical reads: 2,872.88 88.70
Physical reads: 2,872.88 88.70
Physical writes: 2.64 0.08
Physical writes: 2.64 0.08
User calls: 114.65 3.54
User calls: 114.65 3.54
Parses: 60.26 1.86
Parses: 60.26 1.86
Hard parses: 28.64 0.88
Hard parses: 28.64 0.88
Sorts: 15.86 0.49
Sorts: 15.86 0.49
Logons: 0.42 0.01
Logons: 0.42 0.01
Executes: 106.84 3.30
Executes: 106.84 3.30
Transactions: 32.39
Transactions: 32.39

  很明显逻辑读比较多,另外等待事件cr request retry也是造成性能差的一个原因。我们可以通过分割应用,对大表分区等方法进行系统优化。[/code]

你可以参照下!!

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
read by other session问题
read by other session请问各位都有什么看法和解决的方法
关于session和request的问题?
session = request.getSession(false);rn这句是什么意思?
关于session 与 request 的问题
你每按一个网页上的一个链接就是一个新的request,当服务器返rnrn回给浏览器一个response时,request就结束了,此时保存在rnrnrequest中的对象就不存在了,但是当你用一个浏览器连到服务器rnrn上时application-server会新开一个session给你,当连接超时或rnrn浏览器关闭时session才销毁。所以说作用的范围是不一样,rnrnsession也就可以跟踪用户的状态。rnrnrnrn如果说举一个 session 的例子是 购物网站 登陆 并保存用户信息。rnrn那举一个 request的例子 可以是什么呢 ,以此来看出它们的区别rn
关于request和session传参数的问题
请问,在struts的action里面传参数给页面是不是只能用session,因为我一用request.setAttribute,在jsp页面用request.getAttribute得到的值是null.但用session.getAttribute就会有值。rnrnrequest.setAttribute是不是只能是在页面之间的传递才是最好的,在action里面是不能进行传递的。rn
一个关于session与request的问题
后台: [code=java] HttpSession session = request.getSession(); rn session.setAttribute("houseListFive", houseListFive); rnrnrn request.setAttribute("houseListFive", houseListFive);rn[/code]rnrn前台:[code=java] rn rn "> rn --> rn rn rn "> rn [/code]rnrn用request能正常显示,session第一次打开页面的时候,图片未显示,必须点别的链接或者刷新后,他才显示,这是为何。这张图是个模板图,几乎每个页面都有他,所以要用session.不知道各位还有没有更好的办法。请教各位了
安卓开发问题~retry error,curr request is null
小白初学安卓服务器开了,客户端运行总是timedout如下图,logcat显示retryhandler.retryrequest(l:91) retry error,curr request is null。百度看有些说是xutils问题,已经换了好几个版本尝试都不行。求问怎么解决~![图片](https://img-ask.csdn.net/upload/201602/07/1454817142_130794.jpg)
关于session和request
在页面转换的时候,使用session来取得参数和使用request在效率上有什么区别吗?大量使用session会不会给服务器带来很重的负担?谢谢!
关于request和session的生命周期
最近在重温jsp,之前呢已经看过一遍,有些东西忘了。而在做java web开发时,request,session又是用的比较多的。尤其是页面的跳转传值问题,或多或少地会用到request和session,由于有些东西现在知道,过一段时间会忘,现将request和session的生命周期总结如下: 首先是session,比如我们在实现一个购物车功能时,在某一页面(这里称为页面A)选择了一些购物的商
关于cookies跟session的问题
对于一个网站的后台,一般使用cookies还是session啊?
request和session问题
我在action中如下代码rn request.setAttribute("bb","abcdefg");rn System.out.println(request.getAttribute("bb")+"aa");rnreturn mapping.findForward("s");rn这在控制台可以打印出来abcdefg;rns是转向的jsp文件,myjsp.jsp;rn可是在myjsp.jsp中:rn <%=request.getAttribute("bb") %>rn却得不到啊是空的,什么都没有.我把request改成session也是,我用的工具是myeclipsern请帮忙解决!
request与session的问题
今天早上做的时候出现了request和session都是为空的.rn客户端用的是ajax调用服务器的一个方法,该方法想获取request和session,可怎么获取都是为空的,在下无法解答,求教高手指点。
关于CR和LF的问题!
在做一个PHP的活,rn我是在win2000里编辑的。(我想反正是文本文件)rn可是检验的人说得把CR转换成LF。rn请问这时什么东东?rn有什么用?rn怎么转换???
virtio-blk read request处理流程
基于virtio-blk 讲解linux guest和host处理read request的流程
session和REQUEST
我有一个页面,里面显示一条数据库记录。rn当我用session 传值的时候,如果用户打开两个以上的页面,就会覆盖传过去的ID值。rn但是如果用REQUEST的话,用户又可以修改?后面的值。rn这种情况应该怎么办呢?rn就是想要传值到弹出来的子页面,可以同时打开多个子页面。最后又不会相互覆盖,或者被用户修改!!!!
session与request
a.aspx页面: protected void Page_Load(object sender, EventArgs e)rn rn string ProSn = "5";rn rn rn rnb.aspx页面: protected void Page_Load(object sender, EventArgs e)rn rn SqlParameter[] paras = new SqlParameter[1];rn paras[0] = new SqlParameter("@ProSn", SqlDbType.VarChar);rn paras[0].Value =Request.Params["ProSn"].ToString();rn }rn在b.aspx中的Request.Params["ProSn"]是可以取到值的rn但是如果换成session["ProSn"]就不能取到值了。rn实在是不明白啊?????????????????????????
关于request or session + javabean的讨论
request在请求中有效,session 在会话中有效,现在有这样的页面1--->2-->3页面1post到2 ,2则post 到3,rn在页面2与3中都有这样的语句rnrnrn,在类SomeClass中存在4个属性a,b,c,d,能不能够在1页面中post设置2个属性a,b ,在2页面中再post两个 ,设置someBean中另外两个属性c,d,如果rnscope="request不行,设置为session是不是可以行呢?rn
关于request和session的问题 高手进
我想问下 request.setAttribute("ArrList",list) 和session.setAttribute("ArrList",list)有什么区别吗rn为什么我在页面实现出来的效果是一样的 什么时候用哪个呢?请讲解下
top 5 等待事件中 出现 cr request retry 事件,什么意思啊?
top 5 等待事件中 出现 cr request retry 事件,什么意思啊?
关于session和request及登陆信息的问题~
比如有一个网站,登陆以后可以进行一系列操作.rn但是验证密码身份的操作只有一上来进行一次,后面的都不再进行..那么要保证后续操作的安全性的话怎么做?把用户名和密码放在session里么?rn有没有类似的例子?
有关于session的问题:request和setAttribute
代码如下:rnrnpackage cn.tju.edu.action;rnrnimport java.sql.Connection;rnrnimport java.sql.PreparedStatement;rnimport java.sql.ResultSet;rnimport java.sql.SQLException;rnimport java.util.Map;rnrnimport org.apache.catalina.Session;rnimport org.apache.catalina.connector.Request;rnrnimport com.opensymphony.xwork2.ActionContext;rnrnimport cn.tju.edu.guoguo.LinkDB;rnimport cn.tju.edu.javaBean.User;rnrnimport javax.servlet.http.HttpSession;rnimport java.io.*;rnrnrnpublic class LoginAction rn private String id; rn private String code; rn private String identity;rnrnrn public String getId() rn return id;rn rn public void setId(String id) rn this.id = id;rn rn public String getCode() rn return code;rn rn public void setCode(String code) rn this.code = code;rn rn public String getIdentity() rn return identity;rn rn public void setIdentity(String identity) rn this.identity = identity;rn rn rn @SuppressWarnings( "rawtypes", "unchecked" ) rnpublic String check(User user) throws ClassNotFoundException//把User是进行封装的rn String sql = null;rn if(user.getIdentity().equals("company"))rn sql="select * from company where cid='"+ id +"' and ccode='"+code+"'";rn else if(user.getIdentity().equals("teacher"))rn sql="select * from teacher where tid='"+ id +"' and tcode='"+code+"'";rn else if(user.getIdentity().equals("student"))rn sql="select * from student where sid='"+ id +"' and scode='"+code+"'";rn System.out.println(sql);rn PreparedStatement ps=null;rn ResultSet rs = null;rn Connection con = null;rn Map session = ActionContext.getContext().getSession();rn String tag=null;rn rn try rn con = LinkDB.getConnection();rn ps = con.prepareStatement(sql);rn rs = ps.executeQuery();rn if (rs.next())rn rn session.put("id", id);rn tag = "yes";rn rn elsern session.put("id", null);rn tag = "no";rn rn rn rn catch (SQLException e)rn //return "err";rn e.printStackTrace();rn rn finallyrn rn tryrn rn rs.close();rn ps.close();rn con.close();rn rn catch(SQLException e2)rn rn //return "err";rn e2.printStackTrace();rn rn rn rn return tag;rn rn rn rn rn //public String execute(Object company) throws Exceptionrn public String Execute(String username,String password,HttpSession session)throws Exceptionrn //String id=getId();rn rn //String code=getCode();rn //String identity=getIdentity();rn String id=(String)request.getParameter("id");[color=#FF0000]//这里Multiple markers at this linern - Cannot make a static reference to the non-static method getParameter(String) from the type rn Request[/color]rn String code=(String)request.getParameter("code");rn String identity=(String)request.getParameter("identity");rn rn User user;rn if (check(user).equals("yes"))rn if(identity.equals("company"))rn rn Session.setAttribute("id",id);[color=#FF0000]//The method setAttribute(String, String) is undefined for the type Session[/color]为什么SetAttribute用不了呢?rn Session.setAttribute("identity",company);rn return "Csuccess";rn rn else if(identity.equals("student"))rn Session.setAttribute("id",id);rn Session.setAttribute("identity",student);rn return "Ssuccess";rn rn else rn session.setAttribute("id",id);rn Session.setAttribute("identity",teacher);rn return "Tsuccess";rn rn rn elsern return "error";rn rn rn rn
retry error,curr request is null 求助
小弟安卓小白一枚,最近边在学,边在做一个快递查询的小应用。结果一直提示这个错误,一开始以为是API接口有问题,后来换了另一个接口,仍旧是通过不了。百度也找不到可以的解决方法。rn实在是走投无路了,求懂得的大神指教。
关于JSF managed-bean-scope的session 与 request的问题
我使用JSF 1.2 + TOMCAT6.0 开发了一个很简单的应用:2个页面,一个 backing bean。rnrn在faces-config.xml中,如下配置backing bean时,应用无问题:rnrn rn The one and only HelloBean.rn helloBeanrn org.jia.hello.HelloBeanrn [color=#FF0000]session[/color]rn rnrn但是,当我将managed-bean-scope改成request后,应用就会报错。配置信息如下:rnrn rn The one and only HelloBean.rn helloBeanrn org.jia.hello.HelloBeanrn [color=#FF0000]request[/color]rn rnrnTomcat 报如下错误rnrnjava.io.StreamCorruptedException: invalid stream header: 4F757470rnrnrn不知各位dx有没有碰到过类似问题?多谢
--retry
适合所有初中级工程师,从RxJava的每个知识点进行讲解,并在每个知识点中都带有文字说明和代码例子说明。通过这次系统化的学习,您将可以完整的学习到RxJava家族的所有特性和常用的操作符,掌握操作符的使用,掌握RxJava与Rx其他第三方库的使用。可以用三句简单的话进行概括rnrn面试加分利器 = 加大录取机会rn加快工作效率 = 早点下班回家rn系统化的学习 = 能力全面提升
Xutils 的框架问题retry error, curr request is null ,求解答
Xutils 听说不错 。所以第一次使用 一用就出现retry error, curr request is null。不知道什么问题 ,求大牛解答
CR问题
现在又数据库表结构如下rnrn 字段名称 项目 金额rnrn 字 段 值 项目1 4000rn 项目2 1500rn 项目3 400rn 项目4 80rnrn最终报表格式要求显示如下rnrn表头 项目1 项目2 项目3 项目4rnrn表内容 4000 1500 400 80rnrn哪位高手帮帮忙给个解决办法!
Xutils 的框架问题retry error, curr request is null
网上有人解释是Xutis框架的library 本身存在问题,于是将library重新下载了一个版本rnrn[img=https://img-bbs.csdn.net/upload/201506/08/1433747948_20244.png][/img],不知为什么依然报了retry error, curr request is null
有关session跟cookies的问题
关于在二级域名能不能使用session将各个子网站整合在一起,例如reg.china.com和province.china.com,他们可以共享同一个session吗?rn例如:我的原意是想从A网站里面用B网站的用户登陆,直接登陆到B网站的用户信息那个页面,B网站中用户信息页面在用户登录时给Session["userID"]赋值,然后判断Session["userID"]的值是否为null,如果为空的话就显示"您还没登陆"信息,返回到B网站的登陆首页,但我已经在A网站中给session赋值了,按道理应该可以直接登陆到B网站的用户信息页面,可是却不行,这到底是怎么回事啊?是不是要把session改成cookies的才行啊?rn
求教request,session的类型
求教request,session的类型
如何清空session和request
c#下如何将所有的session和request清空,不想一个个的清除
Session和Request的生命周期(大白话)
一、生命周期: (1)Session Session创建:在你打开一个浏览器开始访问的时候,就创建了。 Session关闭:他在你关闭浏览器的时候或者默认时间(Tomcat是30分钟)后会销毁。 (2)Request Request创建:是在页面向服务端发送一个请求时候,就产生了。这里就把servlet当作服务端 Request关闭:有两种情况: A 使用了dispatcher把上级...
数据存放 session request
SSH框架下,从数据库查询到的数据存放在session中好,还是request中好?rnrn如果放在session中如何管理session中属性呢?
网站建设:session,application和request
我做了个网站,但不会使用session和application来记录相关信息,请高手指教!rn还有,我看别人程序里读request.querystring["string"],但值是哪发出的呢?rn明白人请指教!
request与session的装饰模式解耦
以从零开始编写一个类似Struts2框架的方式来思考和架构,手把手带你从开始分析到结构设计到终实现的整个过程,完成Struts2框架的核心内容,从而更好的理解Struts2框架的设计理念和提升自身的框架编写能力。内容包括编写框架知识详细讲解及Struts2源码分析等。通过本课程学习能掌握框架开发的技能和web框架的设计思路。
session per request模式
由于SSH部分内容庞杂,各大高校和培训机构在教学中存在着大量的问题。如重点不突出、理解错误等。为了便于大家掌握SSH的重点知识,在面试和笔试中轻松通过,肖老师整理了大量的重要试题,并进行了详细讲解!
session和request的区别2
jsp/servlet是一门java程序员必须要了解和掌握的语言,是web开发的必须掌握的技术,本课程带你全面学习和掌握jsp技术,同时介绍和讲解json和ajax技术的综合运用!
request 和 session 差别
request 和 session 的各自概念?(重点)rnrequest 和 session 里面各自能保存什么东西?(举几个例子)rn谢谢!!!!!!!
request and session question! thanks
Set rstobj = Server.CreateObject ("ADODB.Recordset")rnif request("t0")<>"0" and request("t1")<>"" and request("t2")<>"" and request("t3")<>"" thenrnsession("t0")=request("t0")rnsession("t1")=request("t1")rnsession("t2")=request("t2")rnsession("t3")=request("t3")rnabc="select * from produce_brand where(producesort='"& session("t0")&"' and 规格 like '%" & Trim(session("t2")) & "%' and 颜色 like '%" & Trim(session("t3")) & "%' and brand like '%" & Trim(session("t1")) & "%')"rnend ifrnif request("t0")<>"0" and request("t1")="" and request("t2")<>"" and request("t3")="" thenrnsession("t0")=request("t0")rnsession("t2")=request("t2")rnabc="select * from produce_brand where producesort='"& session("t0")&"' and 规格 like '%" & Trim(session("t2")) & "%') " rnend ifrnrstobj.open abc,cnndb,3,1rn为什么不行啊?rn如果我将最后的if条件部分全删除就行如果不是的话rstobj.open abc,cnndb,3,1话有问题搞了很久请教。rn如果不用这种方法那么我用or来表示这两种条件怎么联起来?rn先谢。
request,session的用法
我以前一直用asp,现.net ,在新建一个HTML的网页中可以用request(""); 和request.form("")来提取查询数据和传递数据,但现在的问题是,如果新建一个aspx文件,在后天代码中,想用request(""); 和request.form("")就不行了,如何解决?另外如何在后台代码窗口中使用session的值呢?请教中!!
request和session的生命周期
request对象和session对象的最大区别是生命周期 request对象的生命周期是针对一个客户端(说确切点就是一个浏览器应用程序)的一起请求 当请求完毕之后,request里边的内容也将被释放点 而session的生命周期也是针对一个客户端 但是却是在别人设置的会话周期内(一般是20-30分钟) session里边的内容将一直存在 即便关闭了这个客户端浏览器 session也不一定会马...
STRUTS2获得session和request
STRUTS2获得session和request
相关热词 c#部署端口监听项目、 c#接口中的属性使用方法 c# 昨天 c#func链接匿名方法 c#怎么创建文件夹 c#从键盘接收空格 c#da/ad c#部门请假管理系统 c#服务器socket c# 默认的访问修饰符