ODP.Net OracleConnection.Open冷启动很慢

时间:2016-06-23 13:53:13

标签: c# .net oracle odp.net

我有一个使用Oracle.ManagedDataAccess.dll连接到Oracle数据库的WebAPI服务。每次重置应用程序池(或部署)后,第一个OracleConnection.Open()语句都会有很长的延迟。通常大约8秒钟。后续调用每次约0.5秒。

在阅读了很多关于服务器操作系统和网络问题的建议后,我将其缩小到了oracle客户端本身。如果我远程调试我的代码,在open语句上设置断点,然后运行Sysinternals Process Monitor我可以确认第一个open语句产生544个条目,第二个和后续测试产生2个条目。

条目非常随机,但主要与加密相关。快速浏览日志:

  • RegOpenKey,HKLM \ SOFTWARE \ Microsoft \ Cryptography \ Defaults \ Provider Types \ Type 001
  • RegOpenKey,HKLM \ SOFTWARE \ Microsoft \ Cryptography \ Defaults \ Provider \ Microsoft Strong Cryptographic Provider
  • RegSetInfoKey,HKLM \ SOFTWARE \ Microsoft \ Bryptography \ MachineGuid

这些重复几次,然后有如下部分:

  • RegQueryValue,HKLM \ System \ CurrentControlSet \ WinSock2 \ Parameters \ Protocol_Catalog9
  • RegCreateKey,HKLM \ System \ CurrentControlSet \ Services \ Tcpip \ Parameters
  • RegCreateKey,HKLM \ System \ CurrentControlSet \ Services \ DnsCache \ Parameters
  • RegOpenKey,HKLM \ SOFTWARE \ Policies \ Microsoft \ Windows NT \ DNSClient

然后有几次读取machine.config文件,后跟多个TCP连接并接收到oracle端口1521.以下是从注册表读取时区的部分。

我的问题是,为什么oracle客户端首先打开所有这些?有什么方法可以预先确定其中一些问题的答案吗? (比如配置时区,以便它不需要'问'甲骨文)?

1 个答案:

答案 0 :(得分:0)

只有当我看到tns connect描述符中的地址不是完全限定的时候,即host = computername,而不是host = computername.domain.com。

问题可能是dns解决方案,因为它通过后缀。我想你可以放入一个ip并完全消除dns作为测试。考虑发布您的tns条目和连接字符串。

仅供参考,在创建第一个连接时会发生很多事情,即建立池并实际打开连接而不是从池中取出连接,初始化自我调整的初始参数等,所以我认为数字reg读取可能是红色听证会。