將表標(biāo)記為駐留,這表示 Microsoft® SQL Server™ 不從內(nèi)存中刷新表頁。
DBCC PINTABLE ( database_id , table_id )
database_id
是要駐留的表的數(shù)據(jù)庫標(biāo)識 (ID) 號。若要確定該數(shù)據(jù)庫 ID,請使用 DB_ID 函數(shù)。
table_id
是要駐留的表的對象標(biāo)識號。若要確定表 ID,請使用 OBJECT_ID 函數(shù)。
DBCC PINTABLE 不會導(dǎo)致將表讀入到內(nèi)存中。當(dāng)表中的頁由普通的 Transact-SQL 語句讀入到高速緩存中時,這些頁將標(biāo)記為內(nèi)存駐留頁。當(dāng) SQL Server 需要空間以讀入新頁時,不會清空內(nèi)存駐留頁。SQL Server 仍然記錄對頁的更新,并且如有必要,將更新的頁寫回到磁盤。然而,在使用 DBCC UNPINTABLE 語句使該表不駐留之前,SQL Server 在高速緩存中一直保存可用頁的復(fù)本。
DBCC PINTABLE 最適用于將小的、經(jīng)常引用的表保存在內(nèi)存中。將小表的頁一次性讀入到內(nèi)存中,將來對其數(shù)據(jù)的所有引用都不需要從磁盤讀入。
注意 DBCC PINTABLE 可以提供性能改進,但是使用時務(wù)必小心。如果駐留大表,則該表在開始時會使用一大部分高速緩存,而不為系統(tǒng)中的其它表保留足夠的高速緩存。如果所駐留的表比高速緩存大,則該表會填滿整個高速緩存。sysadmin 固定服務(wù)器角色的某個成員必須關(guān)閉而后重新啟動 SQL Server,然后使表不駐留。駐留太多的表和駐留比高速緩存大的表會產(chǎn)生同樣的問題。
下面是結(jié)果集:
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 權(quán)限默認(rèn)授予 sysadmin 固定服務(wù)器角色的成員且不可轉(zhuǎn)讓。
下例駐留 pubs 數(shù)據(jù)庫中的 authors 表。
DECLARE @db_id int, @tbl_id int相關(guān)文章
USE pubs
SET @db_id = DB_ID('pubs')
SET @tbl_id = OBJECT_ID('pubs..authors')
DBCC PINTABLE (@db_id, @tbl_id)