![]() |
1
8
这里是我问题的最后一个链接:“ SET NOCOUNT ON usage “指的是 article on it . 考虑到它是多么的琐碎,为什么不把它放进去,停止客户端处理另一个结果集呢?
而没有
|
![]() |
2
11
在某些情况下,必须设置nocount。在通过sqlclient的beginExecutexx方法利用线程池设计基于异步处理的高性能中间层时,行计数存在非常严重的问题。一旦 第一 响应数据包由服务器返回。但是,当调用EndExecutexx时,调用完成后,非查询请求就完成了。每个行数响应都是一个响应。当执行甚至是中等复杂的过程时,第一行计数可能在5-10毫秒内返回,而调用在300-500毫秒内完成。它没有在500毫秒后返回提交的异步请求,而是在5毫秒后回调,然后在endexecutexxx中回调495毫秒。结果是异步调用过早完成。并在EndExecuteNoQuery调用中阻止线程池中的线程。这会导致螺纹刀具饥饿。我已经看到高性能系统通过在特定场景中添加set nocount,将吞吐量从每秒数百个调用提高到每秒数千个调用。 考虑到对于大规模/高吞吐量的中间层处理,异步调用是唯一的方法,因此nocount几乎是一个强制性要求。 |
![]() |
3
1
我同意使用nocount是个好主意。 把它添加到每个存储过程或动态SQL语句中执行的所有代码中是一个糟糕的主意。 尤其是当你谈论高性能的时候。TSQL NOCOUNT应该根据数据访问层中的代码的需要进行设置。就像事务和锁定级别一样。 在每次执行的SQL中设置这些内容并不能通过在连接应用程序的代码中设置它们来提高性能。 通过编写更好的代码,而不是向所有SQL添加set nocount语句,可以获得更好的性能。 |
![]() |
ybou · 需要帮助从SQL 2005查询中删除过时的=*连接运算符 7 年前 |
![]() |
Robert · 将多个分隔符分隔的字段视为不同的行 8 年前 |
![]() |
hud · 执行存储过程会导致错误 8 年前 |
![]() |
Gonzalo · 如何将存储过程的结果插入到新表中? 9 年前 |