快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

和记娱乐安卓下载和:《Microsoft Sql server 2008 Internals》读书笔记第九章Plan Caching and Recompilation(7)



上文我们懂得计划缓存内部操作的第一部分-缓存存储。本日我们继承关注已编译计划、履行高低文和计划缓存元数据相关的几个异常有用的系统函数和视图。

■已编译计划(Compiled Plans)

在Object和SQL计划缓存存储中有两种主要的计划类型:已编译的计划和履行计划。已编译计划是我们反省sys.dm_exec_cached_plans视图时看到的类型之一,前面我们已经提到过与编译计划有关的三个主要的objType值:Adhoc,Prepsred,Proc。已编译的计划可以被存储在工具存储或SQL存储中,这取决于他们的objType值。已编译计划被看作可量化的内存工具。他们re-creat和记娱乐安卓下载和e和资源太高了,是以,SQL Server试图在缓存中保留它们。当SQL Server面临较大年夜的内存压力时,移除缓存工具的策略使我们的编译计划不是被移除的第一个工具。

一个编和记娱乐安卓下载和译计划被觉得是一个完全的批处置惩罚,而不仅仅是单个的语句。对付一个多语句的批处置惩罚,你可以把已编译计划看和记娱乐安卓下载和作一个计划数组,已编译的计划能被在多个会话与用户间共享。定义给某个已编译计划的特定履行的(被存储在别的一个布局中的)信息,被称为可履行计划。

■履行高低文(Execution Contexts)

可履行计划或履行高低文,被看作隶属于已编译计划,而不显示在sys.dm_exec_cached_plans视图中。可履行计划是在一个已编译计划履行时被运行时创建。可履行计划可能是存储在工具存储中的工具计划,也可能是存储在SQL存储中的SQL计划。每个可履行计划针对一个已编译计划的一次履行包孕特定的运行时信息,包括实际的运行时参数、任何局部变量信息、在运行时为工具创建的Object IDs,User ID,批处置惩罚中关于当前履行语句的信息等。

当SQL Server开始履行一个已编译计划时,它从已编译计划中天生一个可履行计划。每一个编译计划中的自力语句,都获得自己的可履行计划,你可以看作是一个运行时查询计划。与已编译计划不合的是,可履行计划只能针对单个的会话。例如,假如100个用户模拟履行相同的批处置惩罚,将会有100个针对相同已编译计划的可履行计划。可履行计划能被从相关的已编译计划再天生。比起Create相对资源要低一些。稍后我们会关注与此相关的sys.dm_exec_cached_plan_dependent_objects视图。

■计划缓存元数据(Plan Cache Metadata)

■句柄(handle)

sys.dm_exec_cached_plans视图为每个已编译计划包孕一个值plan_handle。Plan_Handle是SQL Server从完备的编译计划中提掏出的一个哈希值,它对当前的每一个已存在的编译计划是惟一的,可以被多次重用,可以被看作已编译计划的标识。假如批处置惩罚中的某个自力的语句被重编译,但Plan_Handle仍旧保留,缘故原由便是我们前面评论争论过的基于更正的优化策略。

批处置惩罚中的实际SQL 和记娱乐安卓下载和文本或工具被存储在别的一个缓存(SQL Manager,简称SQLMGR)中。与批处置惩罚相关的T-SQL文本,包括所有注释,被存储在它的项(entries)。缓存在SQLMGR的T-SQL文本可以经由过程sql_Hanlde从数据值中提掏出来。SQL_Handle包孕一个完备批处置惩罚文本的哈希值,由于它对某个批处置惩罚是惟一的,因而,SQL_Handle可以看作SQLMGR批处置惩罚文本的一个标识。

任何定义的T-SQL批处置惩罚,有相同的SQL_Handle值,但未必有相同的Plan_Handle。假如缓存键是的任何值改变,我们在计划缓存中获得一个新的plan_Handle。

我们可以在sys.dm_exec_cached_plans视图中,很轻易获得sql_Handle的值,从sys.dm_exec_cached和记娱乐安卓下载和_plan_atrributes函数获取一个特定的plan_Handle,如下语句:

SELECT plan_handle, pvt.set_options, pvt.object_id, pvt.sql_handle

FROM (SELECT plan_handle, epa.attribute, epa.value

FROM sys.dm_exec_cached_plans

OUTER APPLY sys.dm_exec_plan_attributes(plan_handle) AS epa

WHERE cacheobjtype = 'Compiled Plan'

) AS ecpa

PIVOT (MAX(ecpa.value) FOR ecpa.attribute

IN ("set_options", "object_id", "sql_handle")) AS pvt;

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: