ORACLE等待事件:SQL*Net message from client & SQL*Net message to client

简介: 在ORACLE当中有两个很常见的等待事件“SQL*Net message from client”与“SQL*Net message to client”,两者有点区别,下面整理这方面的资料如下:     SQL*Net message from client      表示服务端等待着Cilent发来请求让它处理,这时就会产生SQL*Net message from client等待事件。

在ORACLE当中有两个很常见的等待事件SQL*Net message from clientSQL*Net message to client,两者有点区别,下面整理这方面的资料如下:

 

 

SQL*Net message from client      表示服务端等待着Cilent发来请求让它处理,这时就会产生SQL*Net message from client等待事件。

                                而我们把这种Wait叫做空闲事件(ildel event),并不代表真正的Loading.

 

SQL*Net message to client       这个等待事件发生在服务段向客户端发送消息或数据的时候,一般意味着网络瓶颈或不正确的TCP连接配置。

                                当然它不能做为对网络延迟的准确评估或量化

 

 

 

SQL*Net message from client

 

 

 

"Generally SQL*Net message from client means Oracle is just waiting on some work to do.  The SQL*Net message from client means that you have a session connected and Oracle is waiting for a command so it can do something.

If you're thinking that SQL*Net message from client is the cause of a performance issue, there's likely another underlying issue such as the application connecting but not running any statements (which is not an Oracle issue but would appear to the end user as a performance problem), or you're looking in the wrong place for the source of the performance problem."

 

 

关于SQL*Net message from client 这种等待事件,很好模拟,如下所示,会话68执行了一个SQL后,一直没有向服务器端发送任何SQL语句,那么在服务器端,会话68一直处于SQL*Net message from client等待事件

 

 

会话68连接到数据库后,执行完一个SQL后,不再做任何操作。如下所示:

 

SQL> show user;
USER 为 "TEST"
SQL> select * from v$mystat where rownum=1;
 
       SID STATISTIC#      VALUE
---------- ---------- ----------
        68          0          0

 

 

会话72中查看会话68的状态,就会发现会话68处于SQL*Net message from client等待 

 

SQL> show user;
USER is "SYS"
SQL> select * from v$mystat where rownum=1;
 
       SID STATISTIC#      VALUE
---------- ---------- ----------
        72          0          0
 
SQL> select sid, seq#, event, wait_class,seconds_in_wait 
  2  from v$session_wait where sid=68;
 
       SID       SEQ# EVENT                            WAIT_CLASS SECONDS_IN_WAIT
---------- ---------- -------------------------------- ---------- ---------------
        68         42 SQL*Net message from client      Idle                   314

 

 

但是如果此时在会话68里面执行一个SQL语句,你会看到SECONDS_IN_WAIT就会清零重新开始计时。

 

 

clip_image001

 

 

clip_image002

 

 

 

另外还有一种特殊情况,例如当客户端遭遇网络异常或应用程序奔溃、操作系统蓝屏等等,那么此时对应的会话也会可能遇到SQL*Net message from client空闲等待事件,当然绝大部分情况下,这个等待事件是可以忽略的。

 

 

 

SQL*Net message to client

 

The SQL*Net message to client  may indicate a network-related issue that causes clients too long to get data from the database server.  Thus, it can be a TCP issue, but it is not limited to that.

 

Common causes of a high SQL*Net message to client might include TCP/IP bottlenecks or TNS parameter issues:

High network latency:  Check with netstat to ensure that your TCP/IP does not have bottlenecks.

Incorrect TNS parameters:  Setting such as tcp.nodelay can impact the time for SQL message to client waits.  See these tips on Oracle TNS network tuning .

The SQL*Net message to client Oracle metric indicates the server (foreground process) is sending a message to the client.  Network bottlenecks are very common in distributed systems and those with high network traffic

 

So, if youre sending loads of data over a slow link or mis-configured TCP connection, the SQL*Net message to client wait time can be used as a low-confidence indicator of your SQL*Net throughput (in conjunction with bytes sent via SQL*Net to client), but never a measure of network latency!

 

 

SQL * Net message to client等待事件发生在当一个服务器进程已经发送数据或消息到客户端并正等待回复的时候.这个等待时间是等待从TCP(Transparent Network Substrate)等待响应的时间.这个等待事件通常被认为是一个Network等待事件。SQL * Net message to client等待事件一般意味着网络瓶颈或不正确的TCP连接配置。但是它不能做为对网络延迟的准确评估或量化。当服务端在发送大量数据时, 您可以看到 "SQL * Net message to client" 等待事件所花的时间更长。这个发生在TCP发送缓冲区(TCP send buffer )已满时, 因此TCP堆栈无法接受更多的数据包。数据传送将被阻塞, 直到远程站点发送返回的 ACK 数据包表示它在 TCP 传输流( TCP transmission stream)中的哪些数据已经接收到了。

 

对于SQL * Net more data to client等待事件,ORACLE使用SDU(session data unit)会话数据单元将SDU缓存写入到TCP套接字缓存中.如果数据比会话数据单元的初始大小大那么数据需要被多次的发送.如果有大量的数据被发送然后在每批数据发送后这个会话将会等待'SQL * Net more data to client'等待事件.

 

ORACLE NET允许通过参数SDU(会话数据单元)和TDU(传输数据单元)来控制数据包的大小.它们分别控制会话层和传输层的缓存大小.TDU在数在ORACLE NET v8.0中已经被废弃.

 

 

 

 

 

参考资料:

 

http://www.dba-oracle.com/m_sql_net_message_to_client.htm

http://blog.tanelpoder.com/2008/02/07/sqlnet-message-to-client-wait-gotcha/

http://www.dba-oracle.com/t_sql_net_message_network_throughput.htm

相关文章
|
28天前
|
SQL 开发框架 .NET
ASP.NET连接SQL数据库:详细步骤与最佳实践指南ali01n.xinmi1009fan.com
随着Web开发技术的不断进步,ASP.NET已成为一种非常流行的Web应用程序开发框架。在ASP.NET项目中,我们经常需要与数据库进行交互,特别是SQL数据库。本文将详细介绍如何在ASP.NET项目中连接SQL数据库,并提供最佳实践指南以确保开发过程的稳定性和效率。一、准备工作在开始之前,请确保您
124 3
|
29天前
|
SQL 监控 Oracle
Oracle SQL性能优化全面指南
在数据库管理领域,Oracle SQL性能优化是确保数据库高效运行和数据查询速度的关键
|
1月前
|
SQL 存储 Oracle
Oracle数据库SQL语句详解与应用指南
在数字化时代,数据库已成为各类企业和组织不可或缺的核心组件。Oracle数据库作为业界领先的数据库管理系统之一,广泛应用于各种业务场景。掌握Oracle数据库的SQL语句是数据库管理员、开发人员及运维人员的基本技能。本文将详细介绍Oracle数据库SQL语句的基本概念、语法、应用及最佳实践。一、Or
45 3
|
1月前
|
SQL Oracle 关系型数据库
Oracle SQL:了解执行计划和性能调优
Oracle SQL:了解执行计划和性能调优
45 1
|
28天前
|
SQL 开发框架 .NET
ASP.NET连接SQL数据库:实现过程与关键细节解析an3.021-6232.com
随着互联网技术的快速发展,ASP.NET作为一种广泛使用的服务器端开发技术,其与数据库的交互操作成为了应用开发中的重要环节。本文将详细介绍在ASP.NET中如何连接SQL数据库,包括连接的基本概念、实现步骤、关键代码示例以及常见问题的解决方案。由于篇幅限制,本文不能保证达到完整的2000字,但会确保
|
4月前
|
SQL Oracle 关系型数据库
|
3月前
|
SQL 程序员 数据库
总结查看 .NET EF 生成的 SQL 的 3 种方式,亲测可用
总结查看 .NET EF 生成的 SQL 的 3 种方式,亲测可用
107 0
|
3月前
|
Oracle 关系型数据库
Navicat 连接Oracle ORA-28547: connection to server failed, probable Oracle Net admin error
Navicat 连接Oracle ORA-28547: connection to server failed, probable Oracle Net admin error
104 0
|
4月前
|
SQL Oracle 关系型数据库
MySQL、SQL Server和Oracle数据库安装部署教程
数据库的安装部署教程因不同的数据库管理系统(DBMS)而异,以下将以MySQL、SQL Server和Oracle为例,分别概述其安装部署的基本步骤。请注意,由于软件版本和操作系统的不同,具体步骤可能会有所变化。
286 3
|
3月前
|
SQL
.Net Core EF 日志打印 SQL 语句
.Net Core EF 日志打印 SQL 语句
84 0

推荐镜像

更多