您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

sp_cachestrategy

语法


sp_cachestrategy <dbname>, [<ownername>.]<tablename> 
	[, <indexname> | "text only" | "table only" 
	[, {prefetch | mru}, {"on" | "off"}]]

参数

<dbname>

是存储对象的数据库的名称。

<ownername>

是表所有者的名称。如果表由“dbo”所有,则所有者名称是可选的。

<tablename>

是表的名称。

<indexname>

是表上索引的名称。

text only

更改 text 或 image 对象的高速缓存策略。

table only

更改表的高速缓存策略。

prefetch | mru

是 prefetch 或 mru,并指定要更改的设置。无论可用 I/O 大小是多少,mru 策略都可用于所有高速缓存。设置 prefetch "on" 对已读入只允许 2K I/O 的高速缓存的表或索引不起任何作用。

on | off

指定设置 "on" 或 "off"(用引号引起来)。

示例

示例 1

显示有关 titles 表的高速缓存策略的信息:


sp_cachestrategy pubs2, titles

object name       index name    large IO  MRU
----------------- ------------- --------  --------
dbo.titles        titleidind    ON         ON

如果在不指定策略和设置的情况下使用 sp_cachestrategy,它将报告对象的当前设置。

示例 2

显示有关 titleind 索引的高速缓存策略的信息:


sp_cachestrategy pubs2, titles, titleind

示例 3

对 titles 表的 titleind 索引禁用预取:


sp_cachestrategy pubs2, titles, titleind, prefetch, "off"

示例 4

对 authors 表重新启用 MRU 替换策略:


sp_cachestrategy pubs2, authors, "table only", mru, "on"

示例 5

对 blurbs 表的文本页重新启用预取:


sp_cachestrategy pubs2, blurbs, "text only", prefetch, "on"

用法

如果为表或索引使用的高速缓存配置了大 I/O 的内存池,则优化程序可以选择通过一次执行最多 8 个数据页的大 I/O 预取数据或索引页。此 prefetch 策略可用于表的数据页或非聚簇索引的叶级页。缺省情况下,对所有表、索引和 text 或 image 对象启用预取。将 prefetch 选项设置为“off”会禁用指定对象的预取。

为了对任意大小的 I/O 执行表扫描和索引扫描,优化程序可以选择使用 MRU 替换策略来预取和放弃高速缓存中的缓冲区。缺省情况下,对所有对象启用此策略。将 mru 设置为“off”会禁用此策略。如果对某个对象关闭 mru,则所有页都会被读入高速缓存中的 MRU/LRU 链,在被其它 I/O 刷新之前,它们会一直保留在高速缓存中。有关高速缓存策略的详细信息,请参见《性能和调优指南》。

只能更改当前数据库中对象的高速缓存策略。

若要查看服务器上所有数据高速缓存的大小、状态和 I/O 大小,请使用 sp_cacheconfig。

如果启用了表或索引的预取,则可以用 set prefetch "off" 替换会话的预取。如果关闭了对象的预取,则不能替换该设置。

select、delete 和 update 命令的 prefetch、lru 和 mru 选项建议各个语句的 I/O 大小和高速缓存策略。如果对表或索引启用了预取或 MRU 策略,则可以通过为 prefetch 指定逻辑页大小的 I/O 大小以及通过指定 lru 策略替换查询的预取或 MRU 策略。例如,以下命令对 titles 表强制 LRU 策略、逻辑页大小 I/O 和表扫描:


select avg(advance) 
from titles (index titles prefetch 2 lru)

如果请求了预取大小,但没有为请求大小的 I/O 配置对象的高速缓存,则优化程序将选择最佳可用 I/O 大小。

如果用 sp_cachestrategy 为对象启用了预取,则在 select、delete 或 update 命令中指定逻辑页大小的 prefetch 将替换先前的 set prefetch "on" 语句。在 select、delete 或 update 命令中指定较大的 I/O 大小不会替换 set prefetch "off" 命令。