Oracle SQL *净等待事件

 

介绍

不幸的是,Oracle呼叫“Network Waits”大多数通常与网络有关,但几乎完全有关在发送之前打包网络的时间所需的时间。
客户端=您,工具,SQLPLUS,应用程序
不是客户端,另一侧=影子进程正在传送到客户端

三次等待,只有“more data”可能与网络问题有关’甚至不清楚,另外两个只是在发送之前打包消息所需的时间。

将SQL * NET消息到客户端 –是时候包装消息(包括网络时间)可能是调整SDU
SQL *来自客户端的更多数据 – 可能的网络问题,可能是sdu
SQL *将更多数据纳入客户端 –是时候包装消息(包括网络时间)可能是调整SDU

 

 存在相同的事件,但客户端是阴影过程,另一个数据库播放影子进程的卷:

 

SQL * NET消息到DBLink 
SQL *从DBLink获取更多数据 – 可能的网络问题,可能是sdu
SQL *将更多数据纳入dblink 

 

SQL *净等待事件

 

SQL *来自客户端的网络消息

空闲事件
等待客户的工作
包括来自阴影的消息的网络传输时间

通常表示客户端“思考时间”或“处理时间”
Egor Starostin的示例,  http://oracledba.ru
从10046痕迹
    =====================.
   在光标#1 len = 43 dep = 0 uid = 0 oct = 3 lid = 0 tim = 1304096237
    hv=2707617103 ad=’89a03e18′
    从rownum的all_objects中选择*< 20
    END OF STMT
    解析#1:c = 0,e = 143,p = 0,cr = 0,cu = 0,mis = 0,r = 0,dep = 0,og = 1,tim = 1304096209
    exec#1:c = 0,e = 744,p = 0,cr = 0,cu = 0,mis = 0,r = 0,dep = 0,og = 1,tim = 1304097036
    WAIT #1: nam=’将SQL * NET消息到客户端’ELA = 3驱动程序ID = 1650815232
    #bytes = 1 p3 = 0 obj#= - 1 tim = 1304097096
    获取#1:c = 10000,e = 6903,p = 0,cr = 9,cu = 0,mis = 0,r = 1,dep = 0,og = 1,tim = 1304104057
1->WAIT #1: nam=’SQL *来自客户端的网络消息‘ ela= 721 driver
    ID = 1650815232#bytes = 1 p3 = 0 obj#= - 1 tim = 1304104865#[非空闲]
    WAIT #1: nam=’将SQL * NET消息到客户端’ELA = 1驱动程序ID = 1650815232
    #bytes = 1 p3 = 0 obj#= - 1 tim = 1304105319
    获取#1:c = 0,e = 627,p = 0,cr = 21,cu = 0,mis = 0,r = 15,dep = 0,og = 1,tim = 1304105524
2->WAIT #1: nam=’SQL *来自客户端的网络消息‘ ela= 253 driver
    ID = 1650815232#bytes = 1 p3 = 0 obj#= - 1 tim = 1304105818#[非空闲]
    WAIT #1: nam=’将SQL * NET消息到客户端’ELA = 1驱动程序ID = 1650815232
    #bytes = 1 p3 = 0 obj#= - 1 tim = 1304105867
    获取#1:c = 0,e = 63,p = 0,cr = 6,cu = 0,mis = 0,r = 3,dep = 0,og = 1,tim = 1304105900
3->WAIT #1: nam=’SQL *来自客户端的网络消息‘ ela= 1960753 driver
    ID = 1650815232#bytes = 1 p3 = 0 obj#= - 1 tim = 1306066946#[空闲]
    =====================.
    在光标#1 LEN = 21 DEP = 0 UID = 0 OCT = 3 LID = 0 TIM = 1306069444
    hv=2200891488 ad=’89913b50′
    从双重选择用户
    END OF STMT
    解析#1:c = 0,e = 60,p = 0,cr = 0,cu = 0,mis = 0,r = 0,dep = 0,og = 1,tim = 1306069440
    …
前两个“SQL *来自客户端的网络消息’处于光标处理的中间,被认为是非空闲等待。
第三“SQL *来自客户端的网络消息”在光标之间并考虑空闲事件,即我们正在等待来自客户端的下一个命令。

 

将SQL * NET消息到客户端

将要发送到客户端的消息需要的时间
不包括网络时间
看泰兰·珀塞尔’s analysis of 将SQL * NET消息到客户端

 

SQL *将更多数据纳入客户端

与客户端的SQL * NET消息相同,除非这是跨越SDU数据包的数据。

等待代表包装数据所需的时间。
不包括网络时间

 

SQL *来自客户端的更多数据

唯一的SQL *净等待,可以指示可能的网络问题
客户端正在将数据发送到跨越包的阴影(想想大数据插入,可能是大的代码块,大的SQL语句)
影子等待下一个数据包。
可以表示网络延迟。
可以指示客户端工具的问题
以下是Ashmon的示例,其中应用服务器在插入上死于中间流。影子进程留下了等待完成消息。您可以在左侧的数据库上看到常规加载,然后刚刚过量负载崩溃,以及所有这些’s left is waits on “SQL *来自客户端的更多数据”

可能设置SDU = 32768以及将RECV_BUF_SIZE和SEND_BUF_SIZE设置为65536。

 

SQL * NET Break / RESET到客户端

SQL语句中的错误

控制C.
通常在应用程序中突出显示和错误
例子:
       CREATE TABLE T1 (C1 NUMBER);
       ALTER TABLE T1 ADD
            (CONSTRAINT T1_CHECK1 CHECK (C1 IN ('J','N')));
       ALTER SESSION SET EVENTS
            '10046 TRACE NAME CONTEXT FOREVER, LEVEL 12';
       INSERT INTO T1 VALUES (1);
跟踪文件
       PARSING IN CURSOR #2 len=25 dep=0 uid=0 oct=2 lid=0 tim=5009300581224 hv=981683409 ad='8e6a7c10'
       INSERT INTO T1 VALUES (1)
       END OF STMT
       PARSE #2:c=0,e=2770,p=0,cr=2,cu=0,mis=1,r=0,dep=0,og=1,tim=5009300581220
       BINDS #2:
       EXEC #2:c=0,e=128,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,tim=5009300581418
       ERROR #2:err=1722 tim=512952379
       WAIT #2: nam='SQL * NET Break / RESET到客户端' ela= 31 driver id=1650815232 break?=1 p3=0 obj#=-1 tim=5009300581549
       WAIT #2: nam='SQL * NET Break / RESET到客户端' ela= 92 driver id=1650815232 break?=0 p3=0 obj#=-1 tim=5009300581662
不幸的是甲骨文没有’除非您是追踪,否则提供有关调试的许多信息。如果你不’t trace, the SQL won’因为来自甲骨文而被捕获’S的角度来说陈述了’T可接受的SQL语句,因此没有SQL ID可以跟踪。

 

dblink sql *净等待

这些等待与
SQL * NET消息到DBLink

SQL *从DBLink获取更多数据
SQL *将更多数据纳入dblink
SQL * net break /重置为dblink

 

分析和调整

有没有人’在Oracle方面进行调整的努力。您可以尝试优化SDU和SEND_BUF_SIZE和RECV_BUF_SIZE。
对于实际上获取有关网络速度的信息,您必须使用类似的东西
  • p
  • tnsping.
  • 网络嗅探器

 

SDU.

默认SDU可以设置在SQLNET中。 ora.
如果它’没有设置,默认为2048
最大值是32768
默认值或SQLNET.ORA中的值可以在TNSName中覆盖。 ora和listener.ora。客户端和服务器会在两个设置中较小的尺寸协商尺寸。
(TDU - 传输数据单元 - 请参见“注释44694.1”TDU参数“在Oracle Net V8.0及更高版本中已被弃用并被忽略。它仅在此提及后向后兼容。)
tnsnames.ora.
      V10G = (DESCRIPTION =
      (SDU=32768)
      (ADDRESS = (PROTOCOL = TCP)(HOST = fuji)(PORT = 1522))
      (CONNECT_DATA =
      (SERVER = DEDICATED) (SERVICE_NAME = v10g)
) )
listener.or.
       SID_LIST_LISTENER =
       (SID_LIST =
       (SID_DESC =
       (SDU=32768)
       (SID_NAME = v10g)
       (ORACLE_HOME = /export/home/oracle10)
))

追踪

sqlnet.ora.

       trace_level_client=16
       trace_directory_client=/tmp
       trace_file_client=client.trc
       trace_unique_client = true
       trace_level_server=16
       trace_directory_server=/tmp
       trace_file_server=server.trc

client.trc.

       client_3582.trc:[12-JAN-2008 11:37:39:237] nsconneg: vsn=313, gbl=0xa01, sdu=32768, tdu=32767

更多来自Jonathan Lewis的 http://www.jlcomp.demon.co.uk/sdu.html

 

recv_buf_size和send_buf_size.

这些缓冲区的推荐尺寸(来自Oracle’s docs) is at least
网络带宽*往返=缓冲门大小
例如,如果网络带宽为100MB,则往返时间(来自ping)是5ms
           100,000,000 bits   1 byte   5 seconds
           ---------------- x ------ x --------- = 62,500 bytes
            1 second          8 bits     1000
tnsnames.ora.
           V10G = (DESCRIPTION =
           (SEND_BUF_SIZE=65536)
           (RECV_BUF_SIZE=65536)
           (ADDRESS = (PROTOCOL = TCP)(HOST = fuji)(PORT = 1522))
           (CONNECT_DATA =
           (SERVER = DEDICATED) (SERVICE_NAME = v10g)
           ) )
 
listener.or.
           SID_LIST_LISTENER =
           (SID_LIST =
           (SID_DESC =
           (SEND_BUF_SIZE=65536)
           (RECV_BUF_SIZE=65536)
           (SID_NAME = v10g)
           (ORACLE_HOME = /export/home/oracle10)
           ))
 
sqlnet.ora.
          RECV_BUF_SIZE=65536
          SEND_BUF_SIZE=65536

 

4 thoughts on “ 甲骨文 SQL *净等待事件

评论被关闭。