什么是sql server中的Parse Tree缓存对象类型

时间:2012-03-21 19:11:27

标签: sql-server caching memory

当我们查询SYS.DM_EXEC_CACHED_PLANS时,会出现一个名为parse tree的缓存对象类型,显示视图和表值函数。它是否类似于存储过程和即席查询的查询计划?

1 个答案:

答案 0 :(得分:9)

没有

这是该过程早期阶段的输出。它将被替换为在编译阶段之前引用Views的查询。涉及的阶段是

  • 解析(输出:解析树)
  • 绑定(输出:Algebrized Tree)
  • 查询优化(输出:执行计划)
  • 查询执行

有关这些的完整描述,请参阅Benjamin Nevarez的文章The SQL Server Query Optimizer

AFAIK尽管在Parse Tree中显示为sys.dm_exec_cached_plans,但实际上是第二阶段的输出存储并替换为查询。此查询支持此功能,其中这些对象显示为Bound Trees

SELECT text, 
       objtype, 
       refcounts, 
       usecounts, 
       size_in_bytes, 
       cacheobjtype, 
       name 
FROM   sys.dm_exec_cached_plans p 
       CROSS APPLY sys.dm_exec_sql_text(plan_handle) 
       JOIN sys.dm_os_memory_cache_entries e 
         ON p.memory_object_address = e.memory_object_address 
WHERE  cacheobjtype = 'Parse Tree'