2

我想检查选项以改进我的查询。

有时,我想在生产服务器上进行测试,所以我不能使用 DBCC FREEPROCCACHE 和 DBCC DROPCLEANBUFFERS 来清除整个服务器缓存。

您能否与我分享仅针对我的连接/范围进行一种“缓存清理”的方法?

谢谢。

4

3 回答 3

5

DBCC FREEPROCCACHE (plan_handle | sql_handle | pool_name)

通过传递 plan_handle 或其他选项,我们将能够清除特定 sp 或查询的缓存。

于 2012-09-12T11:26:26.100 回答
2

缓冲区不保存在用户特定的表中,也不按用户存储 - SQL Server 无法选择性地清除它,因为它不知道为哪些查询保存了哪些项目;这样做会在几乎所有情况下产生不必要的开销(除了你现在尝试做的事情。对不起。)尽管如此,还是有选择的。

然而,有一些建议可以改善这个问题,即使这个问题无法避免:

  • 您可以使用 with(RECOMPILE) 强制查询查找新计划,但这不会清除缓存。
  • 您可以将每个查询运行两次,以查看缓冲数据后它运行的速度/速度。
  • 您可以反复交替这两种方法,看看它们是否变得更快,以及速度差异收敛到什么程度。
  • 您可以隔一两天运行它们,也可以在服务器重置后运行它们。(这是如果生产服务器偶尔会被重置。)
  • 本文对在这种情况下进行测试有其他想法。

    于 2012-05-23T17:25:07.303 回答
    0

    如果停机时间可以,您可以使数据库脱机,然后立即使其联机。

    于 2012-05-23T20:33:00.463 回答