Transact-SQL 参考

DBCC PINTABLE

将表标记为驻留,这表示 Microsoft® SQL Server™ 不从内存中刷新表页。

语法

DBCC PINTABLE ( database_id , table_id )

参数

database_id

是要驻留的表的数据库标识 (ID) 号。若要确定该数据库 ID,请使用 DB_ID 函数。

table_id

是要驻留的表的对象标识号。若要确定表 ID,请使用 OBJECT_ID 函数。

注释

DBCC PINTABLE 不会导致将表读入到内存中。当表中的页由普通的 Transact-SQL 语句读入到高速缓存中时,这些页将标记为内存驻留页。当 SQL Server 需要空间以读入新页时,不会清空内存驻留页。SQL Server 仍然记录对页的更新,并且如有必要,将更新的页写回到磁盘。然而,在使用 DBCC UNPINTABLE 语句使该表不驻留之前,SQL Server 在高速缓存中一直保存可用页的复本。

DBCC PINTABLE 最适用于将小的、经常引用的表保存在内存中。将小表的页一次性读入到内存中,将来对其数据的所有引用都不需要从磁盘读入。

注意  DBCC PINTABLE 可以提供性能改进,但是使用时务必小心。如果驻留大表,则该表在开始时会使用一大部分高速缓存,而不为系统中的其它表保留足够的高速缓存。如果所驻留的表比高速缓存大,则该表会填满整个高速缓存。sysadmin 固定服务器角色的某个成员必须关闭而后重新启动 SQL Server,然后使表不驻留。驻留太多的表和驻留比高速缓存大的表会产生同样的问题。

结果集

下面是结果集:

Warning: Pinning tables should be carefully considered. If a pinned table is larger, or grows larger, than the available data cache, the server may need to be restarted and the table unpinned.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
权限

DBCC PINTABLE 权限默认授予 sysadmin 固定服务器角色的成员且不可转让。

示例

下例驻留 pubs 数据库中的 authors 表。

DECLARE @db_id int, @tbl_id int
USE pubs
SET @db_id = DB_ID('pubs')
SET @tbl_id = OBJECT_ID('pubs..authors')
DBCC PINTABLE (@db_id, @tbl_id)

请参见

DBCC

内存构架

DBCC UNPINTABLE

sp_tableoption