有没有办法告诉SQL Server不缓存某些类型的计划?例如,如果您有来自SQL Server Management Studio的大量用户查询,是否有办法告诉这些查询不会缓存在计划缓存中,从而占用内存和其他资源?您是否可以采取其他行为调整来防止临时查询占用生产服务器上的资源?
答案 0 :(得分:1)
我不知道任何......但是,一般来说,我认为在大多数高性能情况下,你会担心这个细节,你可能想要一个受保护的生产数据库从用户提交的查询开始。在生产中,这些查询计划的内存不会对您造成伤害,而是用户提交的查询会发出大量锁定并使您的性能停滞不前。作为一个基本的架构问题,您可以考虑:
如果您真的无法做到这些,并且用户提交的查询计划确实让您失望,那么您必须处于非常独特的情况。如果您想要更详细地编辑问题,可能会得到更好的建议。
(对不起,我没有回答你实际问过的问题;希望比我更了解情况的人会这样做。)
答案 1 :(得分:1)
您可以通过按http://msdn.microsoft.com/en-us/library/cc645587.aspx
设置“针对adhoc工作负载优化”设置来影响SQL Server处理adhoc查询和缓存计划的方式本质上,它的作用是说'第一次调用adhoc查询时,不要缓存计划,而是存储已调用此查询。第二次调用相同的adhoc查询时,计划将被缓存。
我们在我们的一个生产服务器上设置了这个,并立即释放了2 GB的RAM,这更多地说明了当前对该服务器的工作负载(而不是那些好东西)
答案 2 :(得分:0)
我认为可能没有必要担心限制此问题,但you can start here和讨论linked there