我有一个使用Oracle.ManagedDataAccess.dll
连接到Oracle数据库的WebAPI服务。每次重置应用程序池(或部署)后,第一个OracleConnection.Open()
语句都会有很长的延迟。通常大约8秒钟。后续调用每次约0.5秒。
在阅读了很多关于服务器操作系统和网络问题的建议后,我将其缩小到了oracle客户端本身。如果我远程调试我的代码,在open语句上设置断点,然后运行Sysinternals Process Monitor我可以确认第一个open语句产生544个条目,第二个和后续测试产生2个条目。
条目非常随机,但主要与加密相关。快速浏览日志:
这些重复几次,然后有如下部分:
然后有几次读取machine.config文件,后跟多个TCP连接并接收到oracle端口1521.以下是从注册表读取时区的部分。
我的问题是,为什么oracle客户端首先打开所有这些?有什么方法可以预先确定其中一些问题的答案吗? (比如配置时区,以便它不需要'问'甲骨文)?
答案 0 :(得分:0)
只有当我看到tns connect描述符中的地址不是完全限定的时候,即host = computername,而不是host = computername.domain.com。
问题可能是dns解决方案,因为它通过后缀。我想你可以放入一个ip并完全消除dns作为测试。考虑发布您的tns条目和连接字符串。
仅供参考,在创建第一个连接时会发生很多事情,即建立池并实际打开连接而不是从池中取出连接,初始化自我调整的初始参数等,所以我认为数字reg读取可能是红色听证会。