`
javababy1
  • 浏览: 1181788 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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

阅读更多
将SQL Server数据表驻留内存是SQL Server提供的一项功能,在一般小型系统的开发过程中估计很少会涉及到。这里整理了相关文档资料,演示如何把SQL Server中一个表的所有数据都放入内存中,实现内存数据库,提高实时性。Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
1, DBCC PINTABLEEï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
Marks a table to be pinned, which means Microsoft SQL ServerEï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
does not flush the pages for the table from memory.Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
SyntaxDBCC PINTABLE ( database_id , table_id ) Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
To determine the database ID, use the DB_ID function.Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
To determine the table ID, use the OBJECT_ID function.Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
注释Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
DBCC PINTABLE 不会导致将表读入到内存中。当表中的页由普通的 Transact-SQL 语句读入到高速缓存中时,这些页将标记为内存驻留页。当 SQL Server 需要空间以读入新页时,不会清空内存驻留页。SQL Server 仍然记录对页的更新,并且如有必要,将更新的页写回到磁盘。然而,在使用 DBCC UNPINTABLE 语句使该表不驻留之前,SQL Server 在高速缓存中一直保存可用页的复本。Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
DBCC PINTABLE 最适用于将小的、经常引用的表保存在内存中。将小表的页一次性读入到内存中,将来对其数据的所有引用都不需要从磁盘读入。Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
注意Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
DBCC PINTABLE 可以提供性能改进,但是使用时务必小心。如果驻留大表,则该表在开始时会使用一大部分高速缓存,而不为系统中的其它表保留足够的高速缓存。如果所驻留的表比高速缓存大,则该表会填满整个高速缓存。sysadmin 固定服务器角色的某个成员必须关闭而后重新启动 SQL Server,然后使表不驻留。驻留太多的表和驻留比高速缓存大的表会产生同样的问题。 Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
示例:Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
Declare @db_id int, @tbl_id intEï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
Use DATABASE_NAMEEï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
Set @db_id = DB_ID('DATABASE_NAME')Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
Set @tbl_id = Object_ID('Department')Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
DBCC pintable (@db_id, @tbl_id)Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
可将表Department设置为驻留内存。Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
Declare @db_id int, @tbl_id intEï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
Use DATABASE_NAMEEï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
Set @db_id = DB_ID('DATABASE_NAME')Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
Set @tbl_id = Object_ID('Department')Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
DBCC UNpintable (@db_id, @tbl_id)Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
可将表Department取消设置为驻留内存。Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
可以使用如下的SQL指令来检测执行情况:Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
Select ObjectProperty(Object_ID('Department'),'TableIsPinned')Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
如果返回结果为1:则表示该表已经设置为驻留内存;0:则表示没有设置为驻留内存。Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
2, SP_TableOptionEï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
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.Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
Syntaxsp_tableoption [ @TableNamePattern = ] 'table' Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
, [ @OptionName = ] 'option_name' Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
, [ @OptionValue = ] 'value' Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
其中,'option_name' 有如下用法:Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
pintableEï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
-- When disabled (the default), it marks the table as no longer RAM-resident. When enabled, marks the table as RAM-resident.Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
(可将指定的表驻留内存)Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
另外,table lock on bulk load, insert row lock, text in row等等可选值,因不涉及将表驻留内存,具体用法可以查询SQL Server Books Online.Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
Value有如下用法:Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
the option_name is enabled (true, on, or 1) or disabled (false, off, or 0)Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
示例:Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
EXEC sp_tableoption 'Department','pintable', 'true' Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
将数据表Department驻留内存Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
EXEC sp_tableoption 'Department','pintable', 'false'Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
取消数据表Department驻留内存Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
可以使用如下的SQL指令来检测执行情况:Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
Select ObjectProperty(Object_ID('Department'),'TableIsPinned')Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
如果返回结果为1:则表示该表已经设置为驻留内存;0:则表示没有设置为驻留内存。Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
3. ConclusionsEï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
将数据表设置为驻留内存时,并没有实际将表读入内存中,直到该表从被检索。因此,可以使用如下SQL指令进一步将数据表Department驻留内存:Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
Select * From DepartmentEï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
另外,可以使用如下SQL指令方便显示/检测数据库Database中所有设置为驻留内存的表:Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
SELECT * FROM INFORMATION_SCHEMA.Tables Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
WHERE TABLE_TYPE = 'BASE TABLE' Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
AND OBJECTPROPERTY(object_id(TABLE_NAME), 'TableIsPinned') > 0Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
分享到:
评论

相关推荐

    sqlserver内存释放

    sqlserver 内存释放

    SQLSERVER_大内存选项开启

    SQLSERVER_大内存选项开启

    自动释放sql server 进程内存的程序,附源代码

    自动释放sql server 进程内存的程序,附源代码。1分钟释放一次sqlserver进程内存。

    如何解决SQL Server内存不断增加问题

    SQL Server 实例在启动时通常获取8到12MB的内存以完成初始化过程。当实例完成初始化后,就不会再获取更多的内存,直到用户连接到该实例并开始产生工作负荷。...本文将为大家介绍如何解决SQL Server内存不断增加问题。

    SqlServer表结构转oracle表结构

    SqlServer表结构转oracle表结构,注释也会一同带上,界面操作可以对表可以单个选择多选查询等操作,C#开发源码见附件

    SQL_Server_2008_R2_CPU_和_内存_最大优化_分配

    利用资源控制器,在SQL Server 2008 R2中解决方案供应商有切实可用的方法管理CPU和内存。  资源消耗是长期以来困扰使用SQL Server的解决方案供应商的基本问题之一。任何服务器,不管它是物理的还是虚拟的,供处置的...

    SQL语句实现查询SQL Server内存使用状况

    sum(virtual_memory_reserved_kb)as vm_Reserved_kb,--保留的内存 sum(virtual_memory_committed_kb)as vm_Committed_kb,--提交的内存 sum(awe_allocated_kb)as awe_Allocated_kb,--开启AWE后使用的内存 sum(shared_...

    SqlServer查看表结构

    SqlServer查看表结构,已通过验证

    SQL SERVER 2000 内存扩展

    它为运行Windows Server2003x64 Edition的SQL Server2000用户在64位计算架构上运行32位的SQLServer应用软件扫清了障碍。  这名代表指出,SP4是一款补丁软件包,主要解决安全性、性能、适用性问题。她说,除了补丁...

    优化SQL Server数据库服务器内存配置

    在大多数情况下,为了充分发挥Windows NT 4.0系统效能,内存的作用比起处理器的处理能力更具有影响力,特别是在客户/服务器模式环境...本文主要介绍利用如何优化SQLServer数据库服务器的内存配置提出一些认识和看法。

    SQL Server数据库占用过多内存的解决方法

    此文档中详细记载了,SQL Server数据库占用过多内存的解决方法,希望可以帮到下载的朋友们!

    导出SQLSERVER表及字段说明.

    可以导出SQLSERVER表及字段说明.

    分析SQL server服务器的内存配置

    配置SQL数据库服务器只选默认的设置会把大量的内存给浪费,系统的性能也不能因为的大内存而提升,本文介绍了SQL server服务器的内存配置过程。

    Navicat 实现同步sqlserver表结构到mysql操作手册1

    Navicat 实现同步sqlserver表结构到mysql操作手册 --Create By 卞中明 201610141.选中对应mysql数据库,在表对象页面

    SQL Server的内存为何不断增加

    当SQL Server数据库引擎运行时,其默认内存管理行为并不是获取特定的内存量,而是在不产生多余换页I/O的情况下获取尽可能多的内存。...随着更多的用户连接并运行查询,SQL Server将获取支持需求所需的额外内存。

    SQLServer恢复表级数据详解

    主要介绍了SQLServer中用于快速恢复表,而不是库,但是切记,防范总比亡羊补牢好,需要的朋友可以参考下

    sql server 2014企业版.txt

    通过内置的突破式内存驻留技术,SQL server 2014能为要求最高的数据库应用提供关键业务所需性能内存驻留技术,性能最高提升30倍。它还启用了全新的混合云解决方案,解决了云备份和灾难恢复问题。经过多样化的性能...

    优化Microsoft SQL Server数据库内存配置

    内存是影响Microsoft SQL Server系统性能的一个重要因素,SQL Server数据库安装时将 为具有32MB物理内存的机器缺省配置16MB可用内存,16MB物理内存的机器缺省配置4MB可用内 存。应在Microsoft SQL Server数据库安装...

    查看sqlserver表分区数据分布

    查看sqlserver表分区数据分布,需要的同学下载看看吧

    sqlserver表数据插入到oracle表中的一种实现方式(表结构相同)

    最近由于应急,需要把sqlserver表和表数据在oracle中复制一份。表结构的创建比较简单,但是表的数据量太大,一时也想不到怎么把sqlserver表数据复制到oracle中,于是请教公司主管,用存储过程实现可以查询出所有数据...

Global site tag (gtag.js) - Google Analytics