Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何跟踪ADO.NET连接池问题?_C#_Asp.net Core_Ado.net - Fatal编程技术网

C# 如何跟踪ADO.NET连接池问题?

C# 如何跟踪ADO.NET连接池问题?,c#,asp.net-core,ado.net,C#,Asp.net Core,Ado.net,我们有一个ASP.NET核心应用程序,它遇到了一些我不理解的数据库连接池问题 此应用程序最初是针对.net framework构建的。最近我们更新到ASP.NET Core 3.1,这要求我们以.NET Core为目标。同时,我们对一个相当大的底层库进行了遍历,以使许多路径使用以前同步的async/await,包括到数据库的所有或几乎所有路径。数据库通信使用System.Data.SqlClient(而不是较新的Microsoft.Data.SqlClient) 这些更改的结果是,当并发请求数量

我们有一个ASP.NET核心应用程序,它遇到了一些我不理解的数据库连接池问题

此应用程序最初是针对.net framework构建的。最近我们更新到ASP.NET Core 3.1,这要求我们以.NET Core为目标。同时,我们对一个相当大的底层库进行了遍历,以使许多路径使用以前同步的async/await,包括到数据库的所有或几乎所有路径。数据库通信使用System.Data.SqlClient(而不是较新的Microsoft.Data.SqlClient)

这些更改的结果是,当并发请求数量较少时,响应时间会有较大的性能提高,而当应用更多负载时,性能会有净损失。 我们观察到的是数据库连接中的瓶颈。性能会更好,直到我们达到连接池限制,然后情况开始变得更糟。增加应用程序最大连接池大小会推迟问题。在使用相同的测试进行更改之前,我们没有达到连接池限制

虽然达到此连接池限制的一些开销并非意外,但我们看到的区别肯定是。我们预计,在更糟糕的情况下,响应时间的平均负载测试时间大致相同,但是我们看到,根据我们在系统中与哪种类型的对象交互,中等负载测试的平均响应时间在25%到90%之间增加


我们已经知道一些缓解问题的方法,特别是我们知道我们正在积极处理数据库调用。我们缺少的是引入瓶颈的原因,以及如何在不进行大量设计返工或回滚的情况下进一步调查/缓解该问题。

您是在问问题吗?SQL Server是多线程的,添加线程是c#我认为这无助于提高性能,可能会使性能恶化。执行查询的时间取决于1)数据库的大小2)数据库中的内存3)返回的数据量。4) 数据库的组织以及数据库的碎片化程度。SQL Server应该是您可以购买的速度最快的机器,并在其中加载尽可能多的可用内存。在c#中添加异步方法可能会导致服务器过载,导致服务器中的更多进程交换,并实际导致性能损失。值得检查的是,连接是否成功重复使用,而不仅仅是保持打开状态(即孤立)。