none
如何通过SQL profiler捕获compile event(not recompile)? RRS feed

  • 问题

  • select * from [Sales].[Customer] where [CustomerID]=1

    我们知道,上面的语句在真正执行之前,会有发生如下步骤

    step1 ,对上面的语句进行编译,生成 compiled plan ,缓存起来。生成 compiled plan 的时候应该会发生一个compile event吧?

    step2,  在真正执行之前会check相关的元数据等信息,以决定是否recompilation plan,比如表的scheme变化了,那肯定是要recompilation 的。对于那个recompilation ,我们可以通过 TSQL => SQL:StmtRecompile + Stored Procedures => SP:Recompile 来捕获。

    那我的问题是,在step1 中生成那个 compiled plan 的时候是否对应一个compile plan event?就像如果发生重编译,那就会产生一个Recompile  event。

    如果是,那如何捕获step1 中的那个compile event,应该选择什么trace事件?注意,我想捕获的是step1中第一次编译时发生的compile event,而不是step2中的recompilation 事件。

    当然不限于SQL profiler工具,如果可以的话,extended event也可以。





    2012年4月11日 11:01

答案

全部回复

  • select p.name + N'.' + o.name as EventName, o.description
    from sys.dm_xe_objects o
     inner join sys.dm_xe_packages p on o.package_guid = p.guid
    where object_type = N'event'

    你看看这里面有没有,有的话可以用扩展事件来找。扩展事件没有的话,sql profiler也不会有。


    想不想时已是想,不如不想都不想。

    2012年4月11日 15:18
    版主
  • 谢谢公子哈,我找找看。

    sql profiler里只有Recompile event ,但我没有找到首次编译时发生的compile event,也许真的不存在。

    2012年4月11日 15:22
  • Maybe sql count it as recompile too, can create new sp then trace it for first run and check recompile event. 
    2012年4月11日 16:02
  • 不曉得這個是不是你要的,提出來跟大家交流交流,或許你可以參考下列兩個連結。

    Showplan All for Query Compile

    Showplan XML For Query Compile


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    • 已标记为答案 Jacky_shen 2012年4月12日 3:39
    2012年4月11日 22:05
  • Maybe sql count it as recompile too, can create new sp then trace it for first run and check recompile event. 

    谢谢rmiao

    开始我也是这么认为的,不过我测试后发现不是这样的。

    2012年4月12日 3:38
  • @Terry,

    正解,非常感谢,受益匪浅。

    2012年4月12日 3:39