0

我正在使用 BizTalk WCF 自定义适配器在 SQL Azure 数据库上运行存储过程。我有大约 20k 条记录要作为复合操作进行处理。我们在 Windows Server 2012 上使用 BizTalk 2013 R2。

40-50 分钟后出现以下错误:

使用 URI“mssql://xngoo0zsw2.database.windows.net//overvuuat_20150720?”在发送端口“Swire.BizTalk.M3.Send.PushAssets.Local”上发送到适配器“WCF-Custom”的消息 被暂停。错误详细信息:Microsoft.ServiceModel.Channels.Common.InvalidUriException:超时已过期。在从池中获取连接之前超时时间已过。这可能是因为所有池连接都在使用中并且达到了最大池大小。---> System.InvalidOperationException:超时已过期。在从池中获取连接之前超时时间已过。这可能是因为所有池连接都在使用中并且达到了最大池大小。在 System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection,TaskCompletionSource1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource1 次重试,DbConnectionOptions userOptions) at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource 1 retry) at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource1 retry) at System.Data.SqlClient.SqlConnection.Open() at Microsoft.Adapters.Sql.SqlAdapterConnection.OpenConnection() --- 结束内部异常堆栈跟踪 ---

服务器堆栈跟踪:在 System.ServiceModel.Channels.ServiceChannel.SendAsyncResult.End(SendAsyncResult 结果) 的 System.Runtime.AsyncResult.End[TAsyncResult](IAsyncResult 结果)
在 System.ServiceModel.Channels.ServiceChannel.EndCall(String action, Object [] 出局,IAsyncResult 结果)在 System.ServiceModel.Channels.ServiceChannel.EndRequest(IAsyncResult 结果)

在 [0] 处重新引发异常:在 System.ServiceModel 的 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) 处的 System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)。 Channels.IRequestChannel.EndRequest(IAsyncResult 结果) 在 Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfClient`2.RequestCallback(IAsyncResult 结果) MessageId: {9034380A-E116-4694-BD70-F9933BF37BD3} InstanceID: {91B6E1AA-32AD-48D9 -A18A-F9BF20529764}

以下是该发送端口的配置:

在此处输入图像描述

我将超时时间从 00:50:00 增加到 05:00:00,但结果没有变化。仍然得到同样的错误。

我跑来SP_WHO2获取那些正在运行/排队的连接列表。出现错误时有超过 100 个连接。查询“Select Into”之一处于挂起模式,并在从 SSMS 运行时显示。但我们没有这样的查询,我们从不直接从 SSMS 运行任何查询。

请提出解决此问题的方法。

4

1 回答 1

1

看起来您正在达到 100 的 maxConnectionPoolSize 并且在这种情况下增加超时将无济于事。您可以使用非池连接,但在开始之前先看看为什么有 100 多个连接到数据库。这可能是因为数据库的性能问题(可能需要扩展)/应用程序问题(锁定在表上并阻止其他查询或连接未关闭,因此它们都不会返回到池中)。

对于性能问题,请查询 sys.resource_stats 以查看您的数据库资源利用率是否达到峰值。您还可以使用 sys.dm_Exec_Requests 和 sys.dm_tran_locks 来查看其他连接在做什么。我相信您在使用完它们后会关闭应用程序中的连接(否则它们不会返回到池中)

于 2015-07-21T21:39:04.730 回答