告诉SQL Server仅缓存特定类型的临时查询的方法

告诉SQL Server仅缓存特定类型的临时查询的方法,sql,sql-server,Sql,Sql Server,有没有办法告诉SQL Server不要缓存某些类型的计划?例如,如果有大量来自SQL Server Management Studio的用户查询,是否有方法告诉这些查询不要缓存在计划缓存中,从而占用内存和其他资源?有没有其他行为调整可以防止临时查询占用生产服务器上的资源?我不知道有什么。。。但是,总的来说,我认为在大多数高性能的情况下,您可能会担心这种详细程度,您可能首先需要一个不受用户提交的查询影响的生产数据库。在生产环境中,对这些查询计划造成伤害的不是一点点内存,而是用户提交的查询会发出大量

有没有办法告诉SQL Server不要缓存某些类型的计划?例如,如果有大量来自SQL Server Management Studio的用户查询,是否有方法告诉这些查询不要缓存在计划缓存中,从而占用内存和其他资源?有没有其他行为调整可以防止临时查询占用生产服务器上的资源?

我不知道有什么。。。但是,总的来说,我认为在大多数高性能的情况下,您可能会担心这种详细程度,您可能首先需要一个不受用户提交的查询影响的生产数据库。在生产环境中,对这些查询计划造成伤害的不是一点点内存,而是用户提交的查询会发出大量锁,并使您的性能停滞不前。作为一个基本的建筑问题,你可以考虑:

  • 获取一个复制的离线服务器,用户可以通过临时查询访问该服务器;或
  • 将用户与数据库的交互限制为一组给定的存储过程
  • 如果你真的不能做到这两个,并且用户提交的查询计划真的让你失望,那么你一定处于一个非常独特的情况。如果您想编辑更详细的问题,您可能会得到更好的建议


    (很抱歉,我没有回答您实际提出的问题;希望有比我更有知识的人会回答。)

    我认为可能没有必要担心限制这个问题,但是在讨论中

    您可以通过根据设置“优化临时工作负载”设置来影响SQL server处理临时查询和计划缓存的方式

    本质上,这意味着‘第一次调用临时查询时,不要缓存计划,而是存储已调用的查询。第二次调用同一个临时查询时,计划将被缓存

    我们在一台生产服务器上设置了这一点,并立即释放了2GB的RAM,这比任何东西都更能说明该服务器当前的工作负载(这不是什么好事)