SQL Server:生成输出(打印语句)之前的延迟

时间:2012-10-24 11:02:28

标签: c# sql sql-server sql-server-2008 sql-execution-plan

我可能会对发生的事情略有感觉,但我想我会要求得到确认,并且可能会考虑另一种选择。

作为一个小背景,我编写了一个C#应用程序,它为存储过程提供了一个小前端。该过程包含许多来自其他存储过程的临时表插入(以及一个值为udf的表),以及一些xml处理。

为了了解我在存储过程中的距离,我正在订阅来自InfoMessage的{​​{1}}(使用SqlInfoMessageEventHandler)。我已经在整个SP的各个地方放置了一些信息丰富的打印报表,因此我可以了解已完成的处理并相应地更新状态栏。

SP的粗略结构如下:

SqlConnection

所有消息都被成功接收和处理,但是在从服务器返回任何消息之前有几秒的延迟,然后前几个消息一次全部到达(好像它们都被处理但输出被保持回来一段时间。)

我天真地假设(我还有很多东西要学习数据库机制),我的初始打印声明将在SP中的任何其他处理指令发生之前返回。

我假设服务器正在做一些关于获取执行计划和/或可能重新计算计划的事情,或者是否在返回任何结果之前查询优化器正在进行一些预处理?

希望我的问题可以从一堆文字中合理地理解。基本上,在过程实际开始顺序遇到我的print语句之前,查询优化器是否会让服务器执行一些选择/插入?

我还尝试在初始打印语句之前进行一些小的临时表操作,因此在慢速操作开始之前会返回一些行,但结果大致相同。

感谢您的回复。

2 个答案:

答案 0 :(得分:2)

我可以通过MSSM来判断,当你使用PRINT语句时,由于缓冲区已满时输出就会延迟。如果您想立即输出消息,请使用:

RAISERROR('Message',0,0)NOWAIT

它将作为打印工作,但会立即输出。

希望这有帮助。

答案 1 :(得分:0)

我更喜欢使用SELECT语句而不是PRINT -

SELECT 'Beginning processing'

Create Temp Table
Insert into Temp Table from Table Valued UDF

SELECT 'Creating working Tables'

Create more Temp Tables
Insert into Temp Tables from SPs (each SP contains a print statement e.g 'Starting SP1').