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

sp_bindcache

说明

将数据库、表、索引、text 对象或 image 对象绑定到数据高速缓存

语法


sp_bindcache <cachename>, <dbname>
	[, [<ownername>.]<tablename>
	[, <indexname> | "text only"]]

参数

<cachename>

是活动的数据高速缓存的名称。

<dbname>

是要绑定到高速缓存的数据库的名称或包含要绑定到高速缓存的表、索引、text 或 image 对象的数据库的名称。

<ownername>

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

<tablename>

是要绑定到高速缓存的表的名称或其索引、text 对象或 image 对象要绑定到高速缓存的表的名称。

<indexname>

是要绑定到高速缓存的索引的名称。

text only

将 text 或 image 对象绑定到高速缓存。当使用此参数时,您不能同时给出索引名称。

示例

示例 1

将 titles 表绑定到名为 pub_cache 的高速缓存:


sp_bindcache pub_cache, pubs2, titles

示例 2

将聚簇索引 titles.title_id_cix 绑定到 pub_ix_cache:


sp_bindcache pub_ix_cache, pubs2, titles, title_id_cix

示例 3

将 pubs2 绑定到 tempdb_cache:


sp_bindcache tempdb_cache, pubs2

示例 4

将 pubs2 事务日志 syslogs 绑定到名为 logcache 的高速缓存:


sp_bindcache logcache, pubs2, syslogs

示例 5

将 au_pix 表的 image 链绑定到名为 pub_cache 的高速缓存:


sp_bindcache pub_cache, pubs2, au_pix, "text only"

用法

  • 只能将数据库或数据库对象绑定到一个高速缓存。您可以将数据库绑定到一个高速缓存,并将该数据库中的个别表、索引、text 对象或 image 对象绑定到其它高速缓存。数据库绑定充当该数据库中所有没有其它绑定的对象的缺省绑定。表或索引的数据高速缓存层次如下所示:

  • 如果对象被绑定到高速缓存,则使用对象绑定。

  • a 如果对象未被绑定到高速缓存,但对象的数据库被绑定到高速缓存,则使用数据库绑定。

  • - b 如果对象及其数据库都未被绑定到高速缓存,则使用缺省数据高速缓存。

  • c 在您可以执行 sp_bindcache 之前,高速缓存和绑定到它的对象或数据库必须存在。使用 sp_cacheconfig 创建高速缓存,如果操作不是动态的,则请在将对象绑定到高速缓存之前重新启动 SAP ASE 服务器。

  • 高速缓存绑定将立即生效,不需要重新启动服务器。当将对象绑定到数据高速缓存时:

  • 将清除当前内存中该对象的所有页。

  • 当查询中使用该对象时,其页将被读入绑定的高速缓存中。

  • 您可以将索引绑定到与它所引用的表不同的高速缓存中。如果将聚簇索引绑定到高速缓存,该绑定将只影响索引的根和中间页。它不影响数据页(根据定义,数据页是索引的叶页)。

  • 若要绑定数据库,您必须使用 master 数据库。若要绑定表、索引、text 对象或 image 对象,您必须使用存储这些对象的数据库。

  • 若要绑定数据库中的任何系统表,您必须使用该数据库并且该数据库必须处于单用户模式。请使用以下命令:

    
    sp_dboption <db_name>, "single user", true
    

    有关详细信息,请参见 sp_dboption。

  • 将对象或数据库绑定到不同的高速缓存时,不需要解除它们的现有绑定。对已经绑定的对象发出 sp_bindcache 将删除旧绑定并创建新绑定。

  • 当要将表或其索引绑定到高速缓存时,sp_bindcache 需要获得排它表锁,以便在绑定发生时没有可以读取的页。如果某个用户持有表锁,而您对该对象发出 sp_bindcache,则执行绑定的任务在锁被释放之前将处于休眠状态。

  • 如果绑定对象或解除对象的绑定,则引用该对象的所有存储过程在下次执行时将被重新编译。如果更改数据库的绑定,则引用绑定的数据库中对象的所有存储过程在下次执行时将被重新编译。

  • 如果删除表、索引或数据库,则所有关联的高速缓存绑定将被删除。如果重新创建表、索引或数据库,则必须再次使用 sp_bindcache 才能将其绑定到高速缓存。

  • 如果将数据库或数据库对象绑定到高速缓存,而高速缓存被删除,则高速缓存绑定被标记为无效,但仍存储在 sysattributes 系统表中。当 SAP ASE 服务器重新启动时,将在错误日志中输出警告。如果创建了具有相同名称的高速缓存,则当 SAP ASE 服务器重新启动时,绑定变为有效。

  • 以下过程提供有关各自对象的绑定的信息:sp_helpdb 适用于数据库,sp_help 适用于表,sp_helpindex 适用于索引。sp_helpcache 提供有关绑定到特定高速缓存的所有对象的信息。

  • 使用 sp_spaceused 查看表和索引的当前大小,使用 sp_estspace 估计表预计增长大小。使用 sp_cacheconfig 查看有关高速缓存大小和状态的信息,以及配置和重新配置高速缓存。

  • 虽然仍可以对系统 tempdb 使用 sp_bindcache,但系统 tempdb 的绑定现在是非动态的。在重新启动服务器之前:

  • a 所做的更改不会生效。

  • b 除非将系统 tempdb 显式绑定到缺省数据高速缓存,否则 sp_helpcache 报告状态“P”(表示挂起),显式绑定到缺省数据高速缓存后,状态显示为“V”(表示有效),这是因为缺省情况下,系统 tempdb 已被绑定到缺省数据高速缓存。

    sp_bindcache 的限制为:

  • 不能将 sysattributes 系统表绑定到已命名的高速缓存。例如:

    
    1> sp_bindcache 'systables_cache', pubs2, sysattributes
    2> go
    Msg 867, Level 16, State 1:
    Server 'marina_157', Procedure 'sp_bindcache', Line 409:
    The system table Sysattributes or its indices may not be bound to a named cache.
    (1 row affected)
    Msg 19828, Level 16, State 1:
    Server 'marina_157', Procedure 'sp_bindcache', Line 416:
    Cache binding failed for database 'pubs2'.
    (return status = 1)
     

  • 不能将 master 数据库、master 中的系统表和 master 中系统表上的索引绑定到高速缓存。您可以将 master 中的非系统表及其索引绑定到高速缓存。

  • 以下情况下,不能将数据库或对象绑定到高速缓存:

  • a 隔离级别 0 读取在表上是活动的

  • b 执行绑定的任务有在表上打开的游标

  • 如果高速缓存类型为 log only,则只能将 syslogs 表绑定到该高速缓存。使用 sp_cacheconfig 可以查看高速缓存的类型。