当网站停止时,Oracle数据提供程序会挂起IIS工作进程

Gre*_*ter 12 asp.net oracle iis oracle11g

我们在Oracle 11g第2版中遇到了一个令人讨厌的问题,其中w3wp进程接管整个处理器核心,并且调试显示Oracle数据提供程序无限地抛出ThreadAbortExceptions.开发人员通过执行以下操作找到了此问题:

1)浏览本地使用Oracle数据连接的网站(http:// localhost/OracleWebSite - 我们为所有站点使用IIS,而不是ASP.NET dev服务器).这可确保w3wp进程正在运行,并且应用程序池中存在活动的Oracle连接池.

2)停止网站(或在相关网站上的Visual Studio中执行Rebuild All操作).

我们在受影响的应用程序(所有Oracle Web应用程序)中的Oracle连接处理已经建立并且功能强大.如果我们禁用连接池,则不会发生此问题.Oracle 11g第1版中不会发生此问题.

sco*_*732 14

触发重新编译的任何内容(web.config更改,app_offline.htm,.aspx文件更改等)都会导致核心上的CPU使用率最大化.如果重复此过程,则会最大化下一个核心的CPU使用率,直到整体CPU使用率为100%.

我用sos扩展连接windbg,看起来每个maxed out核心都有一个线程卡在System.AppDomain.Unload(System.AppDomain)中,另一个卡在Oracle.DataAccess.Client.OracleTuningAgent.DoScan()上.

第一个帖子

  • Oracle.DataAccess.Client.OracleTuningAgent.DoScan()
  • Oracle.DataAccess.Client.OracleTuningAgent.TuningFunction()
  • System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext,System.Threading.ContextCallback,System.Object)
  • System.Threading.ThreadHelper.ThreadStart()

第二个帖子

  • System.AppDomain.Unload(System.AppDomain)
  • System.Web.HttpRuntime.ReleaseResourcesAndUnloadAppDomain(System.Object的)
  • System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext,System.Threading.ContextCallback,System.Object)
  • System.Threading._ThreadPoolWaitCallback.PerformWaitCallbackInternal(System.Threading._ThreadPoolWaitCallback)
  • System.Threading._ThreadPoolWaitCallback.PerformWaitCallback(System.Object的)

看起来AppDomain.Unload正在等待OracleTuningAgent.DoScan完成,但该线程被阻塞或正在休眠.

Oracle已经确认了这个问题(bug#9648040),这是一个重中之重.与此同时,可能的解决方法是:

  1. 回滚到11gR1 /早期客户端
  2. 将"Self Tuning = false"添加到连接字符串.您当然会失去自动调整的好处.

斯科特


Sam*_*eby 8

这已经解决了.该修补程序在Oracle 11.2.0.1.2中发布,可通过oracle.com网站获得.

不幸的是,目前只能通过"My Oracle Support"帐户使用此修复程序.

这已经在11.2.0.2和修补程序9966926中修复了ORACLE 11G 11.2.0.1 PATCH 5 BUG FOR WINDOWS(64位AMD64和INTEL EM64T).

或者替代方法:通过向连接字符串添加"Self Tuning = false"来禁用自我调整.