注意这个功能在SQL2005后已经废弃,因为SQL2005会自动管理哪些表常驻内存。

将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 textntext, 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 (trueon, or 1) or disabled (falseoff, 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

为什么我执行 Select ObjectProperty(Object_ID('Department'),'TableIsPinned') 总是返回0,从来没成功过?

经过查询,原来这个功能在2005版本中就废弃了

http://msdn.microsoft.com/zh-cn/library/ms144262(v=SQL.90).aspx

SQL Server 2005 中不支持 SQL Server 早期版本的这些数据库引擎功能。

类别 废止的功能 替代功能

备份和还原

命名管道备份设备。

磁盘或磁带设备。

出于安全原因,SQL Server 不支持对命名管道的备份。

命令提示实用工具

isql 实用工具

使用 sqlcmd 实用工具。

 
sqlcmd 和 osql 实用工具不支持将存储过程返回值传递给退出值。
注意:

有关详细信息,请参阅 sqlcmd 实用工具

配置选项

sp_configure 的 'allow updates' 选项。

存在该选项但不支持对系统表直接更新

配置选项

sp_configure 的 'open objects' 选项。

存在该选项,但其功能已停用。在 SQL Server 2005 中,打开的数据库对象的数量是动态管理的,该数量只受可用内存的限制。sp_configure 中保留了 'open objects' 选项,以确保向后兼容现有脚本。

配置选项

sp_configure 的 'set working set size' 选项

存在该选项,但其功能已停用。

数据库创建

DISK INIT

DISK RESIZE

来自 SQL Server 6.x 的早期行为

数据库创建

CREATE DATABASE 的 FOR LOAD 选项

RESTORE 操作可创建数据库

DBCC

DBCC DBREPAIR

使用 DROP DATABASE 可以删除已损坏的数据库。

有关详细信息,请参阅 DROP DATABASE (Transact-SQL)

DBCC

DBCC NEWALLOC

DBCC CHECKALLOC

有关详细信息,请参阅 DBCC (Transact-SQL)

DBCC

DBCC PINTABLE,DBCC UNPINTABLE

无。

DBCC

DBCC ROWLOCK

行级锁定为自动。

DBCC

DBCC TEXTALL

DBCC TEXTALLOC

DBCC CHECKDB

DBCC CHECKTABLE

扩展存储过程编程

当存在来自原始登录的模拟上下文切换时,请使用 SRV_PFIELD 结构中的 SRV_PWD 字段。

无。

网络协议

以下协议:NWLink IPX/SPX、AppleTalk、Banyan Vines 和多协议。

将您的应用程序和数据库引擎的实例配置为使用以下受支持的协议之一:TCP/IP 套接字、named pipes、VIA 或 shared memory。

有关详细信息,请参阅选择网络协议

重新生成 master

Rebuildm.exe

在 Setup.exe 中使用 REBUILDDATABASE 选项。

有关详细信息,请参阅如何从命令提示符安装 SQL Server 2005

示例数据库

Northwind 和 pubs

使用 AdventureWorks;但是,可通过下载或从 SQL Server 的早期版本中复制而得到 Northwind 和pubs

有关详细信息,请参阅示例和示例数据库

Setup.exe

远程安装 - 不支持 TARGETCOMPUTER 参数。

使用远程连接以用户界面模式或从命令行提示符运行 SQL Server 安装程序。

API

基于 SQL-DMO 的 WMI 提供程序

托管代码:Microsoft.SqlServer.Management.Smo.Wmi

非托管代码:WMI Provider for Configuration Management

API

SQL 命名空间 API (SQL-NS)

Transact-SQL

*= 和 =* 外部联接运算符

使用 FROM 子句的 JOIN 语法。

有关详细信息,请参阅 FROM (Transact-SQL)

虚拟表

syslocks

sys.dm_tran_locks

有关详细信息,请参阅 sys.dm_tran_locks

[转]如何将SQL Server表驻留内存和检测的更多相关文章

  1. SQL Server 表变量和临时表的区别

    SQL Server 表变量和临时表的区别 一.表变量 表变量在SQL Server 2000中首次被引入.表变量的具体定义包括列定义,列名,数据类型和约束.而在表变量中可以使用的约束包括主键约束,唯 ...

  2. 在一个SQL Server表中的多个列找出最大值

    在一个SQL Server表中一行的多个列找出最大值 有时候我们需要从多个相同的列里(这些列的数据类型相同)找出最大的那个值,并显示 这里给出一个例子 IF (OBJECT_ID('tempdb..# ...

  3. SQL Server表分区的NULL值问题

    SQL Server表分区的NULL值问题 SQL Server表分区只支持range分区这一种类型,但是本人觉得已经够用了 虽然MySQL支持四种分区类型:RANGE分区.LIST分区.HASH分区 ...

  4. [转载]在SQL Server 中,如何实现DBF文件和SQL Server表之间的导入或者导出?

    原来使用SQL Server 2000数据库,通过DTS工具很方便地在SQL Server和DBF文件之间进行数据的导入和导出,现在安装了SQL Server2005之后,发现其提供的“SQL Ser ...

  5. SQL server 表中如何创建索引?

    SQL server 表中如何创建索引?看个示例,你就会了 use master goif db_id(N'zhangxu')is not nulldrop database zhangxugocre ...

  6. SQL Server表分区【转】

    转自:http://www.cnblogs.com/knowledgesea/p/3696912.html SQL Server表分区   什么是表分区 一般情况下,我们建立数据库表时,表数据都存放在 ...

  7. 释放SQL Server占用的内存

    由于Sql Server对于系统内存的管理策略是有多少占多少,除非系统内存不够用了(大约到剩余内存为4M左右),Sql Server才会释放一点点内存.所以很多时候,我们会发现运行Sql Server ...

  8. SQL SERVER表不能修改表结构的处理方法

    SQL SERVER表提示不能修改表结构,这究竟是什么原因呢?下面就为您介绍处理该问题的方法,如果您在SQL SERVER表修改方面遇到过问题,不妨一看. 新装的SQL SERVER 2008,打开原 ...

  9. SQL Server表分区详解

    原文:SQL Server表分区详解 什么是表分区 一般情况下,我们建立数据库表时,表数据都存放在一个文件里. 但是如果是分区表的话,表数据就会按照你指定的规则分放到不同的文件里,把一个大的数据文件拆 ...

随机推荐

  1. 线段树(区间操作) POJ 3325 Help with Intervals

    题目传送门 题意:四种集合的操作,对应区间的01,问最后存在集合存在的区间. 分析:U T [l, r]填充1; I T [0, l), (r, N]填充0; D T [l, r]填充0; C T[0 ...

  2. Python基础1-Python环境搭建

    Python环境搭建首先通过终端窗口输入 "python" 命令来查看本地是否已经安装Python以及Python的安装版本: 若未安装则需要下载安装,下面为linux和windo ...

  3. POJ3013 Big Christmas Tree(最短路径树)

    题目大概说给一张点和边都有权的图,现在要求其一棵以1结点为根的生成树使树的边权和最小,树边权 = 对应的图边权 * 树边末端点为根的子树所有结点对于图顶点的点权和. 要求∑(边权*子树点权和),等价于 ...

  4. HDU3870 Catch the Theves(平面图最小割转最短路)

    题目大概说给一个n×n的方格,边有权值,问从求(1,1)到(n,n)的最小割. 点达到了160000个,直接最大流不好.这题的图是平面图,求最小割可以转化成求其对偶图的最短路,来更高效地求解: 首先源 ...

  5. 寻找房间中心zz

    Finding the Centroid of a Room Boundary It's been a while since my last post and I'm sure most of yo ...

  6. Poj1611The Suspects

    A - The Suspects Time Limit: 1000 MS Memory Limit: 20000 KB 64-bit integer IO format: %I64d , %I64u  ...

  7. python程序设计语言笔记 第一部分 程序设计基础

    1.1.1中央处理器(CPU) cpu是计算机的大脑,它从内存中获取指令然后执行这些指令,CPU通常由控制单元和逻辑单元组成. 控制单元用来控制和协调除cpu之外的其他组件的动作. 算数单元用来完成数 ...

  8. [linux]unixODBC的安装配置说明

    什么是unixODBC: ODBC(Open Database Connect)是由Microsoft 公司于1991 年提出的一个开放的,用于访问数据库的统一接口规范. unixODBC的是为非Wi ...

  9. 栈式自动编码器(Stacked AutoEncoder)

    起源:自动编码器 单自动编码器,充其量也就是个强化补丁版PCA,只用一次好不过瘾. 于是Bengio等人在2007年的  Greedy Layer-Wise Training of Deep Netw ...

  10. Android HttpURLConnection Post 参数 (https)

    声明utf-8: public static String CHARSET_UTF8 = HTTP.UTF_8; eg:登陆请求方法,通过接口返回结果: public static void logi ...