整个连接是否有等效的“OPTION(RECOMPILE)”或“WITH RECOMPILE”?

4 performance sql-server-2005 sql-server

我很好奇。有什么办法可以防止 SQL 查询执行计划在整个连接期间被缓存?

我可以运行一个基本上说“对所有后续命令使用 OPTION(RECOMPILE) 直到我告诉你停止这样做”的命令吗?

我非常清楚这里的所有性能权衡,我知道这不是一个可以掉以轻心的步骤。但是,我处于一种独特的情况,这种行为可能是有利的。

更新:我找到了跟踪标志 253,但找不到官方提到它究竟做了什么:https : //stackoverflow.com/questions/2596587/what-does-sql-server-trace-flag-253-do

gbn*_*gbn 6

执行计划不会在连接期间持续:它们在所有连接之间共享。

必须为每个查询指定它,因为任何计划缓存/重用问题仅影响该计划。

请问你想做什么,为什么你认为它会有所帮助?

编辑,评论后

该计划必须存在于缓存中才能使用(和重用)。当它被缓存时,它使用内存。重新编译将使用相同的内存使用额外的 CPU 等来重新编译。

你说“大量命令”和“数千个数据库”:这是你的问题。并且可能没有“dbo”。等帮助计划重用

想法:

  • 购买更大的服务器 + 更多的 RAM
  • 使用尽可能多的 RAM 迁移到 64 位
  • 将数据库拆分到不同的服务器上
  • 强制参数化
  • 检查查询质量