• 性能问题: SQL*Net message from client 等待时间太长


    今天发现一个临时表执行超级慢,查看表空间 cpu 内存等都正常,查看等待事件 为 SQL*Net message from client

    执行的SQL:


    UPDATE TEMP_TABLE_20210304_012 A
    SET new_enodeb_name =
    SELECT B.ENO_NAME FROM LTE_EMSGSD_V2 B
    WHERE (SUBSTR (A.NE_NAME ,1,INSTR(A.NE_NAME,'-','-1')-1) =
    B.ENO_NAME ON A.NE_NAME=B.ENODEB_ID) AND ROWNUM < 2 );

    等待事件:

    执行计划:

    我的SQL可以执行,时间为 16  min 

    优化办法 加索引 

    加完索引问题解决 

    其他办法补充尝试:

    补充摘自 :http://blog.itpub.net/12798004/viewspace-1766893/

    1.对于数据库的一个session来说,每时每刻都在wait 的状态。
    WAIT FOR IO / WAIT FOR CPU / WAIT FOR LATCH /WAIT FOR ...
    这一点你可以查询 v$session_wait,总有数据.
    SQL>select sid,event,p1,p1raw from v$session_wait;

    2.对于Server process来说,如果客户端发来一个请求,它处理完所有需要处理的请求之后,它就进入另一个WAIT,SQL*Net message from client ,等待着Cilent发来请求让它处理,而我们把这种wait叫做空闲事件(ildel event),并不代表真正的loading。
    举一日常生活中的例子,你去银行办理业务,办理业务的窗口的业务员。如果有很多客户在等待办理业务,那么业务员会非常忙碌,但是,当他办理所有排队的业务后,没有人办理业务了,这时,业务员就处于了SQL*Net message from client状态,一直等待有人走进大厅来办理业务的客户。就相当于业务员wait for "业务from客户“,事实上是在休息,也就是没有loading.

    4.当然也有其他情况,比如,业务员办理完业务后,一直没有按叫号器,大厅里有很多人都在等待办理业务 ,这种情况下的 (SQL*Net message from client) 就不正常了。相对应的Oracle里的就是网络不畅,Client想发信息给Server process,结果不成功,而Server process一直是wait for SQL*Net message from client .
    5.结论,只要网络没问题。SQL*Net message from client 这个wait不用管。

    SQL*Net message to client

    这个等待事件发生在服务器端向客户端发送消息的时候。当服务器端向客户端发送消息产生等待时,可能的原因是用户端太繁忙,无法及时接收服务器端送来的消息,也可能是网络问题导致消息无法从服务器端发送到客户端。

    这个等待事件包含两个参数。

    driver id:服务器端和客户端连接是用的协议信息。

    #bytes:服务器端向客户端发送消息的字节数。

    SQL*Net message to dblink

    这个等待事件和SQL*Net message to client相同,不过是发生在数据库服务器端和服务器端之间的等待事件,产生这个等待的原因可能是远端服务器繁忙,而无法即时接收发送过来的消息,也可能是服务器之间网络问题导致消息无法发送过来。

    这个等待事件包含两个参数。

    driver id:服务器端和另一个服务器端连接是用的协议信息。

    #bytes:服务器端通过dblink从另一个服务器端收到的消息的字节数。


    我们可以通过下面语句查询数据库看有什么在等待,
    查询v$session_wait
     
    SELECT S.SID,
           S.SERIAL#,
           S.USERNAME,
           S.STATUS,
           S.MACHINE,
           S.PROGRAM,
           S.MODULE,
           A.SQL_TEXT
      FROM V$SESSION S,
           V$SQLAREA A
    WHERE S.USERNAME IS NOT NULL
       AND S.SQL_ADDRESS = A.ADDRESS
     
    看见SQL*Net message from client 等待时间最长,其实这个是oracle空闲等待时间,只要网络没有问题,可以不用考略这个wait。
  • 相关阅读:
    基于easyUI实现权限管理系统(一)一—组织结构树图形
    基于jquery实现图片拖动和曲线拖放
    SOLID原则
    架构设计-C4
    中台战略
    DDD
    GraphQL
    kafka笔记
    maven
    GIT
  • 原文地址:https://www.cnblogs.com/JIKes/p/14626986.html
Copyright © 2020-2023  润新知