zoukankan      html  css  js  c++  java
  • oralce 记一次 External Procedure initial connection 处理

    1 环境

    oracle 11.2.0.4 RAC(2 nodes),centos 6.8,实体机

    2 问题

    线上环境执行一条sql

    sql> select ST_AsText(ST_Geometry('POINT (10 10)', 0)) from dual;

    session第一连次接耗时稳定20秒,后面消耗毫秒级,前期开发已经进行排除index,碎片等问题

    执行计划如下:
    SQL> select ST_AsText(ST_Geometry('POINT (10 10)', 0)) from dual;

    ST_ASTEXT(ST_GEOMETRY('POINT(1010)',0))
    --------------------------------------------------------------------------------
    POINT  ( 10.00000000 10.00000000)


    Execution Plan
    ----------------------------------------------------------
    Plan hash value: 1388734953

    -----------------------------------------------------------------
    | Id  | Operation         | Name | Rows        | Cost (%CPU)| Time        |
    -----------------------------------------------------------------
    |   0 | SELECT STATEMENT |        |     1 |     2   (0)| 00:00:01 |
    |   1 |  FAST DUAL         |        |     1 |     2   (0)| 00:00:01 |
    -----------------------------------------------------------------


    Statistics
    ----------------------------------------------------------
           2092  recursive calls
            208  db block gets
           3232  consistent gets
             16  physical reads
              0  redo size
           1167  bytes sent via SQL*Net to client
            949  bytes received via SQL*Net from client
              5  SQL*Net roundtrips to/from client
            113  sorts (memory)
              0  sorts (disk)
              1  rows processed

    3 解决思路

    线上环境经过执行sql,发现每一次初始session连接的时候,该执行都会花费稳定20秒(凡是调用这个外部lib库的sql)

    测试环境执行该sql,没有发现任何异常,返回都是毫秒级

    于是对2个环境进行对比(系统,网络,架构,以及oralce参数文件)

            测试              线上

    系统      centos6.8 虚拟机          centos6.8 实体机

    oracle版本   11.2.0.4.0 - Production       11.2.0.4.0 - Production

    实例      RAC 2nodes          RAC 2nodes

    然后是测试环境的cp,expdp的文件导入线上的环境,除了网络ip和内存等大小,其他参数几乎都一样

    这个时候,只好拿出2边的AWR报告来对比了(--可以参考一篇关于awr的文章)

    测试环境的awr报告

    检查线上的awr报告,发现,红圈标注

    --此事件 External Procedure initial connection 稳定花费20秒,于是就基本确认是这个调用lib库的问题。

    期间查询网络文档,很少有相关的资料,于是就重新上传lib库文件,发现问题依旧,然后在本地环境试着导入测试的expdp文件,发现还是不能复现线上的问题

    奋战到11点,今早上来,发现帖子有人回(newkid大神)

    http://www.itpub.net/thread-2106999-1-1.html

    引用的链接https://community.oracle.com/thread/2490921,在昨天的同事也发过一次(以为是grid的sqlnet文件,发现是正常的,而且线上和测试环境的配置都是一样的),这里再稍微仔细的看了一遍。

    抱着测试的心态,先在本地环境oracle rdbms home的路径加了该文件,2个节点都添加,然后重启监听

    --因为是11.2.0.4的rac环境,监听是grid用户在管理,

    [grid@rac2 ~]$ cat /u01/app/11.2.0/grid/network/admin/listener.ora
    LISTENER_SCAN1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1)))) # line added by Agent
    LISTENER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))) # line added by Agent
    ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON # line added by Agent
    ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1=ON # line added by Agent

    [grid@rac2 ~]$ cat /u01/app/11.2.0/grid/network/admin/sqlnet.ora
    # sqlnet.ora.rac2 Network Configuration File: /u01/app/11.2.0/grid/network/admin/sqlnet.ora.rac2
    # Generated by Oracle configuration tools.

    NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

    ADR_BASE = /u01/app/grid

    [grid@rac2 ~]$ cat /u01/app/11.2.0/grid/network/admin/endpoints_listener.ora
    LISTENER_RAC2=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=rac2vip)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=10.15.7.12)(PORT=1521)(IP=FIRST)))) # line added by Agent

    [grid@rac2 ~]$ cat /u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
    # tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
    # Generated by Oracle configuration tools.

    a =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = scanip)(PORT = 1521))
    (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = abc)
    )
    )

    [grid@rac2 ~]$ cat /u01/app/oracle/product/11.2.0/db_1/network/admin/sqlnet.ora
    NAMES.DIRECTORY_PATH= (TNSNAMES)

    发现问题消失,然后经过几次测试,都是毫秒级返回。然后就在线上机器上进行修改并进行测试,发现问题消失,问题消失,问题消失

    --事后疑问:本地环境,测试环境都没有添加文件/u01/app/oracle/product/11.2.0/db_1/network/admin/sqlnet.ora ,但是没有出现调用外部lib库的sql执行缓慢的问题,为什么线上环境就出现了

    --线上环境,这里即将上线的,所以可以进行一定的修改和重启(正式线上的环境建议慎重修改--足够的测试和选择时间等。。)

    --结合官方文档(https://docs.oracle.com/cd/E11882_01/network.112/e41945/toc.htm),对oralce的监听文件,listener.ora,sqlnet.ora,tnsname.ora进行学习了一遍

  • 相关阅读:
    数组
    课堂验证性实验总结
    《大道至简》第二章读后感
    大道至简第一章伪代码
    大道至简
    python学习笔记1
    19maven依赖冲突
    18SSM资源整合2
    18SSM资源整合
    17mybatis注解开发
  • 原文地址:https://www.cnblogs.com/yhq1314/p/10078062.html
Copyright © 2011-2022 走看看