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进行学习了一遍

 

posted @ 2018-12-06 18:05  春困秋乏夏打盹  阅读(745)  评论(0编辑  收藏  举报