在ORACLE当中有两个很常见的等待事件“SQL*Net message from client”与“SQL*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就会清零重新开始计时。

另外还有一种特殊情况,例如当客户端遭遇网络异常或应用程序奔溃、操作系统蓝屏等等,那么此时对应的会话也会可能遇到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 you’re 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

ORACLE等待事件:SQL*Net message from client & SQL*Net message to client的更多相关文章

  1. 全面解析Oracle等待事件的分类、发现及优化

    一.等待事件由来 大家可能有些奇怪,为什么说等待事件,先谈到了指标体系.其实,正是因为指标体系的发展,才导致等待事件的引入.总结一下,Oracle的指标体系,大致经历了下面三个阶段: · 以命中率为主 ...

  2. Oracle等待事件之等待事件详解

    一. 等待事件的相关知识:1.1 等待事件主要可以分为两类:即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件.1). 空闲等待事件指ORACLE正等待某种工作,在诊断和优化数据库的时候, ...

  3. Oracle等待事件db file parallel read

    SQL> select event#,name,parameter1,parameter2,parameter3 from v$event_name where name = 'db file ...

  4. ORACLE等待事件:enq: TX - row lock contention

    enq: TX - row lock contention等待事件,这个是数据库里面一个比较常见的等待事件.enq是enqueue的缩写,它是一种保护共享资源的锁定机制,一个排队机制,先进先出(FIF ...

  5. ORACLE等待事件: log file parallel write

    log file parallel write概念介绍 log file parallel write 事件是LGWR进程专属的等待事件,发生在LGWR将日志缓冲区(log_buffer)中的重做日志 ...

  6. oracle等待事件以及解决方案

    我们可以通过视图v$session_wait来查看系统当前的等待事件,以及与等待事件相对应的资源的相关信息,从而可确定出产生瓶颈的类型及其对象. v$session_wait的p1.p2.p3告诉我们 ...

  7. oracle等待事件-direct path read/write

    转://http://blog.chinaunix.net/uid-23177306-id-2531235.html 一.direct path read1.与直接读取相关联的等待事件.当ORACLE ...

  8. Oracle 等待事件 db file sequential read

    db file sequential read-数据文件顺序读取 等待事件: "db file sequential read" Reference Note (文档 ID 345 ...

  9. ORACLE等待事件:read by other session

    read by other session简介 官方关于read by other session的介绍如下: When information is requested from the datab ...

随机推荐

  1. 五款实用免费的Python机器学习集成开发环境(5 free Python IDE for Machine Learning)(图文详解)

    前言 集成开发环境(IDE)是提供给程序员和开发者的一种基本应用,用来编写和测试软件.一般而言,IDE 由一个编辑器,一个编译器(或称之为解释器),和一个调试器组成,通常能够通过 GUI(图形界面)来 ...

  2. kibana从入门到精通-Kibana安装

    作者其他ELK快速入门系列文章 Elasticsearch从入门到精通 logstash快速入门实战指南 简介 Kibana 是一款开源的数据分析和可视化平台,它是 Elastic Stack 成员之 ...

  3. 使用Hexo搭建个人博客的终极资料

    一.前言 Hexo 是一个基于 NodeJs 博客框架,可以快速的帮我们搭建一个博客系统,Hexo使用的是Markdown(下文简称MD)解析文章的,在几秒内即可利用靓丽的主体生成静态网页. 推荐使用 ...

  4. JavaSSM框架整合

    SSM整合 ssm框架 框架整合  在博客的前面介绍了mybatis,spring,springmvc的使用,那么这篇博客将介绍将mybatis和spring,springmvc的整合. 整合之前,我 ...

  5. MySQL/MariaDB表表达式(3):视图

    视图是表表达式的一种,所以它也是虚拟表.对视图操作的时候会通过语句动态的从表中临时获取数据. 1.创建.修改视图 CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED ...

  6. Gitlab仓库搭建及在linux/windows中免密使用gitlab(二)--技术流ken

    Gitlab简介 GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务. 可通过Web界面进行访问公开的或者私人项目.它拥有与Github类似的 ...

  7. 利用aiohttp制作异步爬虫

      asyncio可以实现单线程并发IO操作,是Python中常用的异步处理模块.关于asyncio模块的介绍,笔者会在后续的文章中加以介绍,本文将会讲述一个基于asyncio实现的HTTP框架--a ...

  8. Docker在Linux上运行NetCore系列(二)把本地编译好的镜像发布到线上阿里云仓库

    转发请注明此文章作者与路径,请尊重原著,违者必究. 系列文章:https://www.cnblogs.com/alunchen/p/10121379.html 开始 本篇文章结束在本地创建完成镜像后, ...

  9. Redis学习笔记(2)-新建虚拟电脑,安装系统CentOSMini

    下载CentOSMini download 点击download,网页显示结果如下 点击红框,跳转至镜像页面,选择任一镜像,下载即可. 新建虚拟机,装载CentOSMini 点击新建 输入名称 输入C ...

  10. WPF Grid布局

    本节讲述布局,顺带加点样式给大家看看~单纯学布局,肯定是枯燥的~哈哈 那如上界面,该如何设计呢? 1.一些布局元素经常用到.Grid StackPanel Canvas WrapPanel等.如上这种 ...