我在Server 2012 SP1中使用参数化SQL查询。
参考sys.dm_exec_cached_plans
和sys.dm_exec_query_stats
,似乎优化器多次创建相同的计划,而不是重用已经存在的计划。
服务器有大量缓存计划,具有相同的query_hash
和query_plan_hash
(目前只有4700个计划,而且还在增加)。
我的问题是:
发布于 2014-09-12 09:13:38
这里有几个不同的问题:
这些属性都会影响计划重用:
是的--想想上面那些会影响计划重用的事情。显然,如果您有一个软件即服务类型模型,其中每个客户端都有自己的数据库,那么您不能真正帮助那里的事情,但是您可以帮助其他两个因素。与应用程序的连接设置保持一致,不要向查询中动态注入不同的间距或注释,并确保应用程序中的数据类型与数据库中的数据类型相匹配。
在这个领域中看到这种情况并不少见,特别是在旧的NHibernate/EF版本中,这些版本根据传入的任何参数使用不同的参数长度(如该链接中所讨论的)。
其性能症状是CPU使用率更高(由于查询编译次数增加)和计划缓存内存使用量更高,但它们通常不是Server上最大的问题。
https://dba.stackexchange.com/questions/76368
复制相似问题