我正在查看使用MS-SQL对象,ExecuteNonQuery和ExecuteNonQueryAsync的DotNet框架上的源代码。
我的理解是,当遇到阻塞和非阻塞调用时,使用async和async只会影响应用程序(Window Service)。
当发出删除命令时,我的CPU使用率很高,在SQL Server Profiliing中,它显示了一个简单的删除命令的CPU为178。应用于SQL Query时,数据库索引看起来没问题。
所以,我想知道如果我将源代码从foo.ExecuteNonQuery()
切换到等待foo.ExecuteNonQueryAsync()
,将会有多少SQL-Server性能提升?它是否会对SQL Server产生影响?
非常感谢您的知识和意见。
答案 0 :(得分:2)
如果我从foo.ExecuteNonQuery()切换[...]以等待foo.ExecuteNonQueryAsync()
,将会有多少性能提升
无论如何。执行查询的本地客户端线程不会阻止ExecuteNonQueryAsync
,这就是全部。 SQL Server将执行相同的查询。
您应该做的是分析为什么您的查询在SQL Server Management Studio中执行它所花费的时间,包括实际执行计划,并分析为什么它花了这么长时间。
也许您的服务器非常繁忙,这也是可能的。或者由于并发事务而导致阻塞。分析这个的好工具是Adam Machanic的工具sp_whoisactive
:如何在循环中使用sp_whoisactive记录活动