实体框架和Azure SQL:已达到最大池大小

问题描述 投票:0回答:1

我们正在针对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)));

有人对可能的原因有任何指示吗?我不想只是随心所欲地增加游泳池的大小。

entity-framework azure-sql-database connection-pooling
1个回答
0
投票

根据您的连接字符串,您正在尝试使用弹性池(最大池大小= 2048)。如this文档中所见,SQL Database Hyperscale当前不支持弹性池。

© www.soinside.com 2019 - 2024. All rights reserved.