LRU-K 算法跟踪最后一次对内存页进行 K 引用的时间(ESE 将 K 的默认值设置为 2),并按照所期望的未来行为,使用该统计信息对页进行等级排序。基于该统计信息,可以决定要丢弃哪个内存驻留页,以便为必须读入内存中的最近访问过的页腾出空间。因为有关被引用的页的统计信息被经常收集,因此 LRU-K 算法可以实时地适应不断更改的访问模式。该算法相当简单,因此几乎不会带来多少簿记开销。它使用每个页的最后两个引用或更多的引用(通常是最后一个 K 引用,在这里,K 大于或等于 2)来决定应当丢弃哪个页。
DBCC PINTABLE 不会导致将表读入到内存中。当表中的页由普通的 Transact-SQL 语句读入到高速缓存中时,这些页将标记为内存驻留页。当 SQL Server 需要空间以读入新页时,不会清空内存驻留页。SQL Server 仍然记录对页的更新,并且如有必要,将更新的页写回到磁盘。然而,在使用 DBCC UNPINTABLE 语句使该表不驻留之前,SQL Server 在高速缓存中一直保存可用页的复本。
DBCC PINTABLE 最适用于将小的、经常引用的表保存在内存中。将小表的页一次性读入到内存中,将来对其数据的所有引用都不需要从磁盘读入。
注意 DBCC PINTABLE 可以提供性能改进,但是使用时务必小心。如果驻留大表,则该表在开始时会使用一大部分高速缓存,而不为系统中的其它表保留足够的高速缓存。如果所驻留的表比高速缓存大,则该表会填满整个高速缓存。sysadmin 固定服务器角色的某个成员必须关闭而后重新启动 SQL Server,然后使表不驻留。驻留太多的表和驻留比高速缓存大的表会产生同样的问题。
示例:
Declare @db_id int, @tbl_id int
Use test
Set @db_id = DB_ID('test')
Set @tbl_id = Object_ID('test')
DBCC pintable (@db_id, @tbl_id)
可以使用如下的SQL指令来检测执行情况:
Select ObjectProperty(Object_ID('test'),'TableIsPinned')
如果返回结果为1:则表示该表已经设置为驻留内存;0:则表示没有设置为驻留内存。
2、SP_TableOption
sp_tableoption 'test','pintable','TRUE';
Select ObjectProperty(Object_ID('test'),'TableIsPinned')
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8183550/viewspace-668656/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/8183550/viewspace-668656/