【问题标题】:What is the advantage of using "Set NOCOUNT ON" in stored procedure's which are used in ssis packages?在 ssis 包中使用的存储过程中使用“Set NOCOUNT ON”有什么好处?
【发布时间】:2016-11-03 20:34:45
【问题描述】:

在了解 SQL Server 的性能调优概念时,我发现存储过程在初始行中使用 SET NOCOUNT ON 并在最后一行再次将其设置回 SET NOCOUNT OFF 将有助于提高性能。

我的问题是:在使用带有 SSIS 包的存储过程时,这会有什么帮助?

【问题讨论】:

    标签: sql-server sql-server-2008 tsql ssis


    【解决方案1】:

    SET NOCOUNT ON 防止为存储过程中的每个语句向客户端发送 DONE_IN_PROC 消息。对于包含多个不返回太多实际数据的语句的存储过程,或者对于包含 Transact-SQL 循环的过程,将 SET NOCOUNT 设置为 ON 可以显着提高性能,因为网络流量会大大减少。

    来源 BOL:SET NOCOUNT

    【讨论】:

    • 重要有点牵强
    • @Paparazzi 不,不是。 没有有返回值的调用意味着没有理由为它使用缓冲区或通过网络发回任何东西。数据库旨在处理数以千计的请求和小改进
    • @PanagiotisKanavos 消除一个 DONE_IN_PROC 是否重要?您需要升级调制解调器。
    • @Paparazzi 我认为您错过了重点,或者没有理解可伸缩性与延迟和往返有关,而不是带宽。这就是批处理语句比执行单个语句更快的原因。也许你应该检查The Fallacies of Distributed Computing,尤其是#2 和 7
    • @PanagiotisKanavos 我需要学习吗?存储过程是一个批处理,发送 DONE_IN_PROC 消息不是往返。
    【解决方案2】:

    SET NOCOUNT ON 是一个 set 语句,可防止显示受 T-SQL 查询语句影响的行数的消息。这在存储过程和触发器中使用,以避免显示受影响的行消息。在存储过程中使用 SET NOCOUNT ON 可以显着提高存储过程的性能。

    SET NOCOUNT ON:这可以防止消息显示哪些包含受影响的行数。 SET NOCOUNT OFF:这会在消息窗口中显示受影响的行数。

    【讨论】:

    猜你喜欢
    • 2010-11-12
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多