现在有个存储过程调用他很慢(就是从外面用exec 执行到进入存储过程内部需要2秒,还没有开始执行存储过程内部的代码)
例:
CREATE   PROCEDURE proc1(
    参数……
)
AS 
   print convert(varchar(50,getdate(),121)--时间2
   --以下是存储过程的处理
goprint convert(varchar(50,getdate(),121)--时间1
EXEC proc1 参数……
go
两次输出的时间相差两秒,调用这个存储过程,还什么都没执行,为什么就用了两秒?

解决方案 »

  1.   

    第一次执行吗?使用set statistics time on看看。
      

  2.   

    2013-06-06 14:31:58.160 SQL Server 执行时间:
       CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
    SQL Server 分析和编译时间: 
       CPU 时间 = 1531 毫秒,占用时间 = 2353 毫秒。 SQL Server 执行时间:
       CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
    2013-06-06 14:32:00.507
    这是两次时间之间的操作
      

  3.   

    SQL Server 分析和编译时间
       CPU 时间 = 1531 毫秒,占用时间 = 2353 毫秒。
    问题出在这里是变异和分析的时间久,而不是运行时间。 
      

  4.   

    SQL Server 分析和编译时间
       CPU 时间 = 1531 毫秒,占用时间 = 2353 毫秒。
    问题出在这里是变异和分析的时间久,而不是运行时间。 
    对,但为什么会这么久,怎么处理呢
      

  5.   

    SQL Server 分析和编译时间
       CPU 时间 = 1531 毫秒,占用时间 = 2353 毫秒。
    问题出在这里是变异和分析的时间久,而不是运行时间。 
    对,但为什么会这么久,怎么处理呢
    按照道理存储过程的执行计划会缓存重用,你是每次运行都是解析编译花费的时间都很久呢?
      

  6.   

    在查询分析器上只是第一次,但在.net程序调用时,每次都很慢
      

  7.   

    你最好抓个Profiler Trace,因为在查询分析器上只有第一次编译才会有问题,看一下.NET什么时候提交到SQL Server什么时候完成。
      

  8.   

    有一个Recompile和Compile的事件,你执行以下看看是不是每次都重编译啊。
      

  9.   

    你的sp里面是动态拼凑sql那种吗?
    sp传入的参数是什么样的类型?
      

  10.   

    有一个Recompile和Compile的事件,你执行以下看看是不是每次都重编译啊。
    不是每次都重编译,但不知道为什么慢
      

  11.   


    不是动态拼凑的,
    参数很多是输出参数(output)