WEB开发网
开发学院数据库MSSQL Server SQL 2005缓存计划小结 阅读

SQL 2005缓存计划小结

 2008-11-24 10:12:49 来源:WEB开发网   
核心提示: 如果是64位的操作系统Target和Visible两者是相等的,Target是系统的可见内存和SQLSERVER最大可用内存两者中较小的那个,SQL 2005缓存计划小结(2),如果是32位系统,当设置了/3GB启动参数此值最大为3G,分别为其生成了一个执行计划,你可以看到两个计划都对应了

如果是64位的操作系统Target和Visible两者是相等的。Target是系统的可见内存和SQLSERVER最大可用内存两者中较小的那个。如果是32位系统,当设置了/3GB启动参数此值最大为3G,否则最大为2G。

如果32位系统中使用了多于4G的内存时,假设你为SQLSERVER配置了AWE。则Target和Visible就不会再相等了。过程缓存是不能存放于AWE内存中的。

假设你在32位操作系统中运行 SQLSERVER2005SP2,系统中有16G内存。你为SQLSERVER配置了AWE,并且考虑到有SSRS、SSIS、FULLTEXT等SQL服务,你设置SQLSERVER引擎的最大可用内存为12G。此时使用DBCC MEMORYSTATUS命令应该看到Target的大小应该是1572864。因为Buffers列的值是代表缓冲区页面的数量,每页的大小为8K。因此12G的话应该是12*1024*1024/8=1572864个缓冲页面。而此时的Visible是不等于Target的,假设当前Visible的值是2G。则过程缓存的最大大小就是2*0.75=1.5G。

如果是在64位系统中,则上面的计算公式为4*0.75+8*0.1=3.8G。我们看到SQL2005的SP2比SP1对过程缓冲区的大小做了更多的限制,这是为了防止因为有大量的缓存计划而导致与数据缓存争抢内存。

那么一个批命令会不会有多个执行计划呢?只有在改变了执行时的环境时才会生成另一个执行计划。视图sys.dm_exec_plan_attributes包含了某计划的一些属性信息,下面我们试验一下改变执行环境后为同一批命令生成多个执行计划,执行下面的语句:

我得到的结果如下:

SQL 2005缓存计划小结

从第三个结果集看到因为两个语句执行时,因为改了日期格式的设置,分别为其生成了一个执行计划。你可以看到两个计划都对应了相同的sql_handle,但是却有不同的plan_handle。

上一页  1 2 3 4  下一页

Tags:SQL 缓存 计划

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接