SET NOCOUNT ON是否真的会产生很大的性能差异

Ral*_*ton 12 performance sql-server-2005

本文中,作者建议存在与之相关的材料开销,SET NOCOUNT ON并且"通过从网络中删除这些额外开销,它可以极大地提高数据库和应用程序的整体性能"

作者引用了默认存储过程模板从2000到2005的更改,并建议"Microsoft甚至意识到问题",这促使此模板发生更改.

是否有人通过设置NOCOUNT ON来证明支持或驳斥声称的性能增益.

Rem*_*anu 11

有些情况下SET NOCOUNT ON是强制性的.当基于通过SqlClient的BeginExecuteXXX方法利用线程池的异步处理设计高性能中间层时,行计数存在非常严重的问题.一旦服务器返回第一个响应数据包,BeginExecute方法就会完成.但是,当调用EndExecuteXXX时,当调用完成时,这将在非查询请求上完成.每个行数响应都是响应.当处理甚至模式复杂的程序时,第一行计数可以在5-10毫秒内返回,而呼叫在300-500毫秒内完成.它不会在500ms后回调提交的异步请求,而是在5 ms后回调,然后在EndExecuteXXX中回调阻塞495 ms.结果是异步调用过早完成并在EndExecuteNonQuery调用中阻塞线程池中的线程.这导致ThreadPool饥饿.我已经看到高性能系统只需在特定情况下添加SET NOCOUNT ON,就可以将吞吐量从每秒数百个呼叫提高到每秒数千个呼叫.

鉴于对于高规模/高吞吐量的中间层处理异步调用是唯一的方法,NOCOUNT几乎是强制性要求.


gbn*_*gbn 8

我在这里提问的最后一个链接:" SET NOCOUNT ON usage "指的是一篇文章.

鉴于它是多么微不足道,为什么不留下它并阻止客户端处理另一个结果集?

没有SET NOCOUNT ON,nHibernate也会破坏(提到的问题)