当你第一次执行 ad hoc 查询的时候,被编译出来的执行计划,sql server 存个一部分。 为什么不全存呢,如果全存,adhoc 查询很频繁,那么不就给 内存带来压力了。
当你第二次查询的时候,就保存这个执行计划。
当你第三次运行的时候,就可以直接从cache 内读取出来执行计划。
开启optimize for ad hoc workloads可能会提升性能也可能没有效果或者影响性能,需要自己做测试。 查看缓存中是否有很多的AD HOC query参考下面文章中给出的脚步: http://www.sqlservercentral.com/articles/SQLServerCentral/91250/
开启'optimize for ad hoc workloads‘会有影响,影响就是你的第二步,所以答案是it depends. 我知道有个原则,如果某个属性是可配置的,那必定有它适用跟不适用的地方,否则只有好处,没有害处的配置,那SQL SERVER一般是不会让你配置的。
http://msdn.microsoft.com/zh-cn/library/ms174283.aspxDBCC DROPCLEANBUFFERS
http://msdn.microsoft.com/zh-cn/library/ms187762.aspx
Transact-SQL 可以直接在ssms运行,也可以在cmd中运行。建议lz看一下这个AWE http://technet.microsoft.com/zh-cn/library/ms190673(v=sql.105).aspx开启后,再看是否有缓存问题。 清除一般是不得已而为之,毕竟占用很多也是值得处理和分析的状态。
RECONFIGURE
当你第一次执行 ad hoc 查询的时候,被编译出来的执行计划,sql server 存个一部分。
为什么不全存呢,如果全存,adhoc 查询很频繁,那么不就给 内存带来压力了。
当你第二次查询的时候,就保存这个执行计划。
当你第三次运行的时候,就可以直接从cache 内读取出来执行计划。
http://www.sqlservercentral.com/articles/SQLServerCentral/91250/
我知道有个原则,如果某个属性是可配置的,那必定有它适用跟不适用的地方,否则只有好处,没有害处的配置,那SQL SERVER一般是不会让你配置的。
这在生产环境中很常见,并不是坏事。
运行perfmon,查看Memory\Available MBytes计数器,在200-300M足已。