sql-server - sql server中的解析树缓存对象类型是什么

标签 sql-server caching memory

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

最佳答案

没有。

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

  • 解析(输出:解析树)
  • 绑定(bind)(输出:代数树)
  • 查询优化(输出:执行计划)
  • 查询执行

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

据我所知,尽管在 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' 

关于sql-server - sql server中的解析树缓存对象类型是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9811287/

相关文章:

python - 无法连接到具有 unicode 名称的数据库

c# - 如果一项操作失败则回滚

php - 缓存 API 数据 Laravel 5.2

java - 服务器重启后如何将 HazelcastClient 重新连接到 HazelcastServer

c++ - 在自定义硬件上映射内存

sql-server - 回滚整个过程(所有语句)

php - 不输出具有匹配 WHERE 值的行

sqlite - 如何让 SQLite 缓存选择命令的结果

C++11,内存泄漏

linux - 如何在 clojure + jvm 1.8 中查找内存 "leaks"