我们正在针对Azure SQL Hyperscale数据库进行测试,并且在测试过程中收到以下错误:
Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.
这是在基于Orleans的应用程序中使用在.NET 4.7.2上运行的EF6时遇到的错误。
我们的连接字符串如下:
<add name="db" connectionString="data source=ourdb.database.windows.net;initial catalog=db;persist security info=True;Authentication=Active Directory Password; UID=*password*; PWD=*password*;Max Pool Size=2048;Pooling=true;multipleactiveresultsets=True;" providerName="System.Data.SqlClient" />
现在,对我来说,2048已经很大。
我们所有的代码都通过服务/存储库模式以及工作单元来访问上下文。一切都在using语句中:
public async Task<Account> GetAccount()
{
using (var uow = this.UnitOfWorkFactory.CreateReadOnly())
{
var accountRepository = uow.GetRepository<IAccountRepository>();
var account = await accountRepository.GetAccounts().MapToCommonFirstAsync();
return account;
}
}
我们还使用了SqlAzureExecutionStrategy,因为我们最初有很多瞬时错误:
this.SetExecutionStrategy("System.Data.SqlClient", () => new SqlAzureExecutionStrategy(5, TimeSpan.FromSeconds(10)));
有人对可能的原因有任何指示吗?我不想只是随心所欲地增加游泳池的大小。
根据您的连接字符串,您正在尝试使用弹性池(最大池大小= 2048)。如this文档中所见,SQL Database Hyperscale当前不支持弹性池。