SQL 2005缓存计划小结
2008-11-24 10:12:49 来源:WEB开发网如果是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_handle,但是却有不同的plan_handle。
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
更多精彩
赞助商链接