簡體   English   中英

ODP.Net OracleConnection.Open冷啟動很慢

[英]ODP.Net OracleConnection.Open cold start very slow

我有一個WebAPI服務,它使用Oracle.ManagedDataAccess.dll連接到Oracle數據庫。 每次重置應用程序池(或部署)后,第一個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客戶端首先打開所有這些? 有什么方法可以預先確定其中一些問題的答案嗎? (比如配置時區,這樣它就不必'問'Oracle了嗎?

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

問題可能是dns解決方案,因為它通過后綴。 我想你可以放入一個ip並完全消除dns作為測試。 考慮發布您的tns條目和連接字符串。

僅供參考,在創建第一個連接時會發生很多事情,即池已建立且連接實際打開而剛從池中取出,初始化自調整參數等,所以我認為reg讀取的數量可能是一個紅色聽證會。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM