【问题标题】:Very long SQL connection opening time很长的 SQL 连接打开时间
【发布时间】:2017-03-16 18:08:34
【问题描述】:

最近,我们已将 Oracle 9.2.0.6 生产数据库从 Windows 32 位 RAC(2 个节点)迁移到 Linux 64 位环境。 Linux 64 位环境的内存是 Windows 32 位环境的 8 倍,Linux 64 位的磁盘速度更快(RAID 10 与 Windows 的 RAID 5 相比)。

但是,在这次迁移之后,我们注意到 sql 连接时间显着增加。有时,打开连接需要 16 秒。我们使用了不同的驱动程序(JDBC、ODBC、OCI)和 SQLPlus。但是,我们注意到 sql 连接时间没有差异。我们调查了网络,但发现网络没有问题。

有时,打开一个连接大约需要 16 秒。这个数据库有大约 50000 个用户模式。

谁能告诉我可以做些什么来减少连接打开时间?我们将不胜感激。

【问题讨论】:

标签: oracle


【解决方案1】:

如果突然tnsping变得很慢(意味着之前的系统都可以),但是ping到同一个数据库服务器很快,最可能的原因是listener.log文件太慢了大:

$ORACLE_HOME/network/log/listener.log

某些操作系统(以我的经验是 SunOS)会遇到写入非常大的文本文件的性能问题(超过 4G?),因此 tail/clean 日志文件将立即解决 tnsping 需要很长时间的问题。

【讨论】:

    【解决方案2】:

    在我们的例子中是 DNS。在我们的管理员注释掉服务器端的所有 DNS 条目后,系统开始立即响应。

    【讨论】:

      【解决方案3】:

      我还遇到过在 Mac OS 上使用 SQL Developer 4.1.5.21 与 Oracle 12.1.0.2.0 建立连接的速度非常慢。

      为了分析这一点,我安装了Oracle Instant Client 以直接检查与sqlplus 的连接。当我尝试与sqlplus 连接时,它给了我以下错误:

      $ sqlplus <USER>/<PASSWORD>@<HOST>:<PORT>/<SERVICE>
      SQL*Plus: Release 12.1.0.2.0 Production on Thu Mar 16 10:50:44 2017
      
      Copyright (c) 1982, 2016, Oracle.  All rights reserved.
      
      ERROR:
      ORA-21561: OID generation failed
      

      然后我找到了博客条目Oracle ORA-21561 : OID generation failed 并将主机名(由hostname 命令返回)添加到/etc/hosts 中的127.0.0.1 行:

      127.0.0.1 localhost MacBook-Pro.local
      

      这修复了sqlplus 中的 ORA-21561 错误以及 SQL Developer 中连接建立缓慢的问题。

      【讨论】:

        【解决方案4】:

        这有很多可能的原因,如果没有更多信息,很难确定根本原因。

        话虽如此,请检查位于您连接的计算机上的 sqlnet.ora 文件(即 /network/admin/sqlnet.ora),看看是否有如下行:

        SQLNET.AUTHENTICATION_SERVICES= (NTS)
        

        如果是这样,请尝试将其更改为:

        SQLNET.AUTHENTICATION_SERVICES= (NONE)
        

        保存并通过 SQLPlus 重试连接。

        另外,检查您为NAMES.DIRECTORY_PATH 设置的值。确保您用于连接到您的实例的方法是列表中的第一个。例如,我们使用 TNSNAMES,我们的内容如下:

        NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
        

        希望这会有所帮助。

        【讨论】:

        • 对于使用 Net*8 的 TCP 连接,服务器需要能够解析主机名和 IP 地址。最快的名称解析是在服务器上的 /etc/hosts 文件中查找。 (名称解析受 /etc/resolv.conf 影响)
        • sqlnet.ora 的设置为 SQLNET.AUTHENTICATION_SERVICES= (NONE) NAMES.DIRECTORY_PATH= (TNSNAMES) 我们能够使用不同的驱动程序从不同的机器重现问题。我们还能够从 SQLPLUS 复制。网络延迟不是问题。这种缓慢是随机发生的。但是,我们可以将这种缓慢与 CPU 峰值相关联。在连接速度较慢时,CPU 峰值达到 100%。我们还注意到系统的 R 值与 CPU 的数量相交。这表明 CPU 瓶颈。
        【解决方案5】:

        可能表明存在问题的地方:

        来自客户:

        • 是否所有客户端都存在问题?
        • ping server 是否相当快?
        • tnsping dbname 慢吗?
        • telnet 能正常连接吗?

        来自服务器:

        • ping client 是否相当快?
        • 按名称和 IP 对客户端进行 nslookup 是否快?
        • tnsping dbname 慢吗?
        • sqlplus user@dbname 快还是慢?
        • 服务器上的直接连接速度快吗?即,export ORACLE_SID=db;sqlplus user/pw

        【讨论】:

        • 是的,所有类型的客户都会出现这个问题。 Ping 非常快。 tnsping 并不慢。是的,我们可以正常使用 telnet 连接。对客户端的 Ping 也非常快 缓慢随机发生。不知何故,我们注意到当大约 30 到 40 个连接同时打开时,数据库 CPU 会达到 100%,并且连接速度会变慢。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-09-21
        • 2011-03-02
        • 2011-12-11
        • 1970-01-01
        • 1970-01-01
        • 2012-06-17
        • 1970-01-01
        相关资源
        最近更新 更多