快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

如何将SQL SERVER表驻留内存和检测

将SQL Server数据表驻留内存是SQL Server提供的一项功能,在一般小型系统的开发过程中估计很少会涉及到。这里整理了相关文档资料,演示如何把SQL Server中一个表的所有数据都放入内存中,实现内存数据库,提高实时性。



1, DBCC PINTABLE

Marks a table to be pinned, which means Microsoft SQL Server does not flush the pages for the table from memory.

Syntax
DBCC PINTABLE ( database_id , table_id )

To determine the database ID, use the DB_ID function.

To determine the table ID, use the OBJECT_ID function.



注释

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 DATABASE_NAME

Set @db_id = DB_ID(\\\'DATABASE_NAME\\\')

Set @tbl_id = Object_ID(\\\'Department\\\')

DBCC pintable (@db_id, @tbl_id)

可将表Department设置为驻留内存。



Declare @db_id int, @tbl_id int

Use DATABASE_NAME

Set @db_id = DB_ID(\\\'DATABASE_NAME\\\')

Set @tbl_id = Object_ID(\\\'Department\\\')

DBCC UNpintable (@db_id, @tbl_id)

可将表Department取消设置为驻留内存。



可以使用如下的SQL指令来检测执行情况:

Select ObjectProperty(Object_ID(\\\'Department\\\'),\\\'TableIsPinned\\\')

假如返回结果为1:则表示该表已经设置为驻留内存;0:则表示没有设置为驻留内存。



2, SP_TableOption

Sets option values for user-defined tables. sp_tableoption may be used to turn on the text in row feature on tables with text, ntext, or image columns.

Syntax
sp_tableoption [ @TableNamePattern = ] \\\'table\\\'
, [ @OptionName = ] \\\'option_name\\\'
, [ @OptionValue = ] \\\'value\\\'

其中,\\\'option_name\\\' 有如下用法:

pintable -- When disabled (the default), it marks the table as no longer RAM-resident. When enabled, marks the table as RAM-resident. (可将指定的表驻留内存)

另外,table lock on bulk load, insert row lock, text in row等等可选值,因不涉及将表驻留内存,详细用法可以查询SQL Server Books Online.

Value有如下用法:

the option_name is enabled (true, on, or 1) or disabled (false, off, or 0)



示例:

EXEC sp_tableoption \\\'Department\\\',\\\'pintable\\\', \\\'true\\\'

将数据表Department驻留内存

EXEC sp_tableoption \\\'Department\\\',\\\'pintable\\\', \\\'false\\\'

取消数据表Department驻留内存



可以使用如下的SQL指令来检测执行情况:

Select ObjectProperty(Object_ID(\\\'Department\\\'),\\\'TableIsPinned\\\')

假如返回结果为1:则表示该表已经设置为驻留内存;0:则表示没有设置为驻留内存。



3. Conclusions

将数据表设置为驻留内存时,并没有实际将表读入内存中,直到该表从被检索。因此,可以使用如下SQL指令进一步将数据表Department驻留内存:

Select * From Department



另外,可以使用如下SQL指令方便显示/检测数据库Database中所有设置为驻留内存的表:

SELECT * FROM INFORMATION_SCHEMA.Tables

WHERE TABLE_TYPE = \\\'BASE TABLE\\\'

AND OBJECTPROPERTY(object_id(TABLE_NAME), \\\'TableIsPinned\\\') > 0
返回类别: 教程
上一教程: ORACLE数据库文件移动
下一教程: 精妙SQL语句

您可以阅读与"如何将SQL SERVER表驻留内存和检测"相关的教程:
· 如何将 XML 文件导入 SQL Server 2000?
· 如何在SQL SERVER中迅速有条件删除海量数据
· SQL Server2000数据库文件损坏时如何恢复
· MS SQL SERVER中如何得到表的创建语句
· SQL SERVER2000数据库文件损坏时如何恢复
    微笑服务 优质保证 索取样品