將表標(biāo)記為駐留,這表示 Microsoft® SQL Server™ 不從內(nèi)存中刷新表頁(yè)。
DBCC PINTABLE ( database_id , table_id )
database_id
是要駐留的表的數(shù)據(jù)庫(kù)標(biāo)識(shí) (ID) 號(hào)。若要確定該數(shù)據(jù)庫(kù) ID,請(qǐng)使用 DB_ID 函數(shù)。
table_id
是要駐留的表的對(duì)象標(biāo)識(shí)號(hào)。若要確定表 ID,請(qǐng)使用 OBJECT_ID 函數(shù)。
DBCC PINTABLE 不會(huì)導(dǎo)致將表讀入到內(nèi)存中。當(dāng)表中的頁(yè)由普通的 Transact-SQL 語(yǔ)句讀入到高速緩存中時(shí),這些頁(yè)將標(biāo)記為內(nèi)存駐留頁(yè)。當(dāng) SQL Server 需要空間以讀入新頁(yè)時(shí),不會(huì)清空內(nèi)存駐留頁(yè)。SQL Server 仍然記錄對(duì)頁(yè)的更新,并且如有必要,將更新的頁(yè)寫(xiě)回到磁盤(pán)。然而,在使用 DBCC UNPINTABLE 語(yǔ)句使該表不駐留之前,SQL Server 在高速緩存中一直保存可用頁(yè)的復(fù)本。
DBCC PINTABLE 最適用于將小的、經(jīng)常引用的表保存在內(nèi)存中。將小表的頁(yè)一次性讀入到內(nèi)存中,將來(lái)對(duì)其數(shù)據(jù)的所有引用都不需要從磁盤(pán)讀入。
注意 DBCC PINTABLE 可以提供性能改進(jìn),但是使用時(shí)務(wù)必小心。如果駐留大表,則該表在開(kāi)始時(shí)會(huì)使用一大部分高速緩存,而不為系統(tǒng)中的其它表保留足夠的高速緩存。如果所駐留的表比高速緩存大,則該表會(huì)填滿整個(gè)高速緩存。sysadmin 固定服務(wù)器角色的某個(gè)成員必須關(guān)閉而后重新啟動(dòng) SQL Server,然后使表不駐留。駐留太多的表和駐留比高速緩存大的表會(huì)產(chǎn)生同樣的問(wè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ù)庫(kù)中的 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)