如何让SQL Server知道不在查询中使用Cache?

Abs*_*Abs 22 t-sql sql-server

只是一个普遍的问题:

是否有一个查询/命令我可以传递给SQL Server在执行特殊查询时不使用缓存?

我正在寻找一个我可以设置的查询/命令,而不是配置设置.有没有必要这样做?

Phi*_*ley 24

DBCC FREEPROCCACHE
Run Code Online (Sandbox Code Playgroud)

将删除所有缓存的程序执行计划.这将导致重新编译所有后续过程调用.

添加WITH RECOMPILE到过程定义将导致每次调用过程时重新编译过程.

我不相信(在SQL 2005或更早版本中)有任何方法可以清除单个程序执行计划的程序缓存,我怀疑你也可以在2008年完成.

  • 您可以使用以下SQL删除单个计划.DBCC FREEPROCCACHE [({plan_handle | sql_handle | pool_name})] [WITH NO_INFOMSGS] (2认同)

Ric*_*kNZ 20

如果要强制查询不使用数据高速缓存,最好的方法是在运行查询之前清除高速缓存:

CHECKPOINT
DBCC DROPCLEANBUFFERS
Run Code Online (Sandbox Code Playgroud)

请注意,强制重新编译将不会影响查询对数据高速缓存的使用.

您不能只标记单个查询以避免缓存的一个原因是缓存使用是执行查询的一个组成部分.如果数据已经在缓存中,那么如果第二次读取数据,SQL Server会对数据做什么?更不用说同步问题等.


Pur*_*ome 10

OPTION(RECOMPILE)另一种不使用 MS-SQL Server 缓存的更本地化的方法是在语句末尾使用关键字。

例如

SELECT Columnname
FROM TableName
OPTION(RECOMPILE)
Run Code Online (Sandbox Code Playgroud)

有关此内容和其他类似查询缓存线索的更多信息,以帮助识别查询问题,Pinal Dave(无隶属关系)提供了一些有关此内容的有用信息。