SQL*Net message from client 事件产生的原因分析

简介: 今天同事在做数据库巡检时,发现巡检报告中有大量的SQL*Net message from client等待事件。同事问什么情况下回产生SQL*Net message from client,为什么回产生SQL*Net message from client。
<div> </div> <div> 今天同事在做数据库巡检时,发现巡检报告中有大量的SQL*Net message from client等待事件。同事问什么情况下回产生SQL*Net message from client,为什么回产生SQL*Net message from client。<br /> <div> 1.对于数据库的一个session来说,每时每刻都在wait 的状态。<br /> WAIT FOR IO / WAIT FOR CPU / WAIT FOR LATCH /WAIT FOR ...<br /> 这一点你可以查询 v$session_wait,总有数据.<br /> SQL&gt;select sid,event,p1,p1raw from v$session_wait;<br /> <br /> 2.对于Server process来说,如果客户端发来一个请求,它处理完所有需要处理的请求之后,它就进入另一个WAIT,<strong>SQL</strong>*<strong>Net</strong> <strong>message</strong> <strong>from</strong> <strong>client</strong> ,等待着Cilent发来请求让它处理,而我们把这种wait叫做空闲事件(<span>ildel event)</span>,并不代表真正的loading。<br /> 举一日常生活中的例子,你去银行办理业务,办理业务的窗口的业务员。如果有很多客户在等待办理业务,那么业务员会非常忙碌,但是,当他办理所有排队的业务后,没有人办理业务了,这时,业务员就处于了SQL*Net message from client状态,一直等待有人走进大厅来办理业务的客户。<span>就相当于业务员wait for "业务</span><span style="font-size:x-small;"><strong>from客户</strong>“,事实上是在休息,也就是没有loading.<br /> </span><br /> 4.当然也有其他情况,比如,业务员办理完业务后,一直没有按叫号器,大厅里有很多人都在等待办理业务 ,这种情况下的 (SQL*Net message from client<span style="display:none;" id="__kindeditor_bookmark_start_123__"></span>) 就不正常了。相<span style="color:#000000;">对应的Oracle里的就是网络不畅,<strong>Client</strong>想发信息给Server process,结果不成功,而Server process一直是wait for <strong>SQL</strong>*<strong>Net</strong> <strong>message</strong> <strong>from</strong> <strong>client</strong> .</span><br /> 5.结论,<span>只要网络没问题。<strong>SQL</strong>*<strong>Net</strong> <strong>message</strong> <strong>from</strong> <strong>client</strong> 这个wait不用管。</span><br /> <br /> <p> <span style="font-size:18px;"><strong>SQL*Net message to client</strong></span> </p> <pre style="display:none;" class="sql" name="code">SQL&gt; select event#,name,parameter1,parameter2,parameter3 from v$event_name where name = 'SQL*Net message to client'; EVENT# NAME PARAMETER1 PARAMETER2 PARAMETER3 ---------- -------------------------------------------------- --------------- --------------- -------------------- 255 SQL*Net message to client driver id #bytes</pre> 这个等待事件发生在服务器端向客户端发送消息的时候。当服务器端向客户端发送消息产生等待时,可能的原因是用户端太繁忙,无法及时接收服务器端送来的消息,也可能是网络问题导致消息无法从服务器端发送到客户端。<br /> <p> 这个等待事件包含两个参数。 </p> <p> driver id:服务器端和客户端连接是用的协议信息。 </p> #bytes:服务器端向客户端发送消息的字节数。<br /> <p> <br /> </p> <p> <span style="font-size:18px;"><strong>SQL*Net message to dblink</strong></span> </p> <pre style="display:none;" class="sql" name="code">SQL&gt; select event#,name,parameter1,parameter2,parameter3 from v$event_name where name = 'SQL*Net message to dblink'; EVENT# NAME PARAMETER1 PARAMETER2 PARAMETER3 ---------- -------------------------------------------------- --------------- --------------- -------------------- 256 SQL*Net message to dblink driver id #bytes </pre> 这个等待事件和SQL*Net message to client相同,不过是发生在数据库服务器端和服务器端之间的等待事件,产生这个等待的原因可能是远端服务器繁忙,而无法即时接收发送过来的消息,也可能是服务器之间网络问题导致消息无法发送过来。 <p> <br /> </p> <p> 这个等待事件包含两个参数。 </p> <p> driver id:服务器端和另一个服务器端连接是用的协议信息。 </p> <p> #bytes:服务器端通过dblink从另一个服务器端收到的消息的字节数。 </p> </div> <br /> 我们可以通过下面语句查询数据库看有什么在等待, </div> <div> 查询v$session_wait </div> <div> </div> <div> SELECT S.SID,<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; S.SERIAL#, <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; S.USERNAME,<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; S.STATUS,<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; S.MACHINE,<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; S.PROGRAM,<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; S.MODULE,<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A.SQL_TEXT<br /> &nbsp; FROM V$SESSION S,<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; V$SQLAREA A<br /> WHERE S.USERNAME IS NOT NULL<br /> &nbsp;&nbsp; AND S.SQL_ADDRESS = A.ADDRESS<br /> </div> <div> </div> <div> 看见<strong>SQL</strong>*<strong>Net</strong> <strong>message</strong> <strong>from</strong> <strong>client</strong> 等待时间最长,其实这个是oracle空闲等待时间,只要网络没有问题,可以不用考略这个wait。 <div> </div> <div> </div> </div> <div> </div>
相关文章
|
7月前
|
SQL 数据可视化 关系型数据库
MCP与PolarDB集成技术分析:降低SQL门槛与简化数据可视化流程的机制解析
阿里云PolarDB与MCP协议融合,打造“自然语言即分析”的新范式。通过云原生数据库与标准化AI接口协同,实现零代码、分钟级从数据到可视化洞察,打破技术壁垒,提升分析效率99%,推动企业数据能力普惠化。
571 3
|
SQL 开发框架 .NET
ASP.NET连接SQL数据库:详细步骤与最佳实践指南ali01n.xinmi1009fan.com
随着Web开发技术的不断进步,ASP.NET已成为一种非常流行的Web应用程序开发框架。在ASP.NET项目中,我们经常需要与数据库进行交互,特别是SQL数据库。本文将详细介绍如何在ASP.NET项目中连接SQL数据库,并提供最佳实践指南以确保开发过程的稳定性和效率。一、准备工作在开始之前,请确保您
897 3
|
11月前
|
SQL 关系型数据库 MySQL
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
|
11月前
|
SQL 算法 数据挖掘
【SQL周周练】:利用行车轨迹分析犯罪分子作案地点
【SQL破案系列】第一篇: 如果监控摄像头拍下了很多车辆的行车轨迹,那么如何利用这些行车轨迹来分析车辆运行的特征,是不是能够分析出犯罪分子“踩点”的位置
297 15
|
12月前
|
SQL 关系型数据库 MySQL
【MySQL】SQL分析的几种方法
以上就是SQL分析的几种方法。需要注意的是,这些方法并不是孤立的,而是相互关联的。在实际的SQL分析中,我们通常需要结合使用这些方法,才能找出最佳的优化策略。同时,SQL分析也需要对数据库管理系统,数据,业务需求有深入的理解,这需要时间和经验的积累。
414 12
|
SQL 数据库 开发者
ClkLog埋点分析系统支持自定义SQL 查询
本期主要为大家介绍ClkLog九月上线的新功能-自定义SQL查询。
ClkLog埋点分析系统支持自定义SQL 查询
|
开发框架 监控 .NET
【Azure App Service】部署在App Service上的.NET应用内存消耗不能超过2GB的情况分析
x64 dotnet runtime is not installed on the app service by default. Since we had the app service running in x64, it was proxying the request to a 32 bit dotnet process which was throwing an OutOfMemoryException with requests >100MB. It worked on the IaaS servers because we had the x64 runtime install
360 5
Visual Studio 快速分析 .NET Dump 文件
【11月更文挑战第10天】.NET Dump 文件是在 .NET 应用程序崩溃或出现问题时生成的,记录了应用程序的状态,包括内存对象、线程栈和模块信息。通过分析这些文件,开发人员可以定位和解决内存泄漏、死锁等问题。在 Visual Studio 中,可以通过调试工具、内存分析工具和符号加载等功能来详细分析 Dump 文件。此外,还可以使用第三方工具如 WinDbg 进行更深入的分析。
1046 1
|
SQL 存储 数据可视化
手机短信SQL分析技巧与方法
在手机短信应用中,SQL分析扮演着至关重要的角色
|
存储 运维
.NET开发必备技巧:使用Visual Studio分析.NET Dump,快速查找程序内存泄漏问题!
.NET开发必备技巧:使用Visual Studio分析.NET Dump,快速查找程序内存泄漏问题!
442 2