我们有一个应用程序,它通过ADO.NET与许多MS SQL Server进行交互。
当前的sql server setup:每个实例上有3个数据库的5个实例。因此,数据库总数为15。
该应用程序对每个数据库执行操作(SELECT,UDPATE,INSERT)(每秒约2000次操作)。
我们使用标准的ado.net连接池功能,在每次操作之前和SqlConnection.Open()
之前调用SqlConnection.Close()
。
它很顺利,但有时(约占总呼叫数的1%)SqlConnection.Open()
需要1到3秒。这会伤害我们的表现,对我们来说至关重要。
连接字符串示例:
<add name="cs1" connectionString="Data Source=MyServer;Initial Catalog=MyDataBase1;Integrated Security=True;Max Pool Size=100;Min Pool size=16;App=BM_OFF_B"/>
根据性能计数器,池化连接的数量保持稳定,这意味着不会创建新连接,只会重用现有连接。
问题是:为什么SqlConnection.Open()
最多需要3秒才能创建物理连接?如何解决这个性能问题?