Happyflystone - 无枪狙击手
No one can go back and make a brand new start.
登录
注册
全站
当前博客
空间
博客
好友
相册
留言
用户操作
[即时聊天]
[发私信]
[加为好友]
无枪狙击手
ID:happyflystone
共
20787
次访问,排名
6238(-3)
,好友
245
人,关注者
484
人。
单片机的设计开发、维修,喜欢数据库。
happyflystone的文章
原创 67 篇
翻译 0 篇
转载 21 篇
评论 131 篇
无枪狙击手的公告
__如果寂寞用code感动自己
最近评论
SM診断:
エロ
セックス
出会い
サンタ:
不倫
おっぱい
アダルト
sz_haitao:
哦,是可以了。。。。。。谢谢
http://blog.csdn.net/sz_haitao/archive/2008/12/25/3601279.aspx
happyflystone:
楼上的应该可以呀
sz_haitao:
我在一个生成模拟数据的过程里,想用随机函数生成一个个长度不等、内容随机的字符串,插入到测试的表里
希望有这样的函数fn(m):
输入长度最大值m
输出 m/3+randmom(m*2/3) 长度的随机字符串
然后循环插入:
insert tb (...,ftext,...) values (...,fn(2000),...)
文章分类
C51
(RSS)
MSSQL
(RSS)
PB
(RSS)
读书笔记
(RSS)
心情日记
(RSS)
收藏
相册
PIC
存档
2009年01月(1)
2008年12月(1)
2008年11月(5)
2008年10月(4)
2008年09月(5)
2008年08月(5)
2008年07月(9)
2008年06月(6)
2008年05月(11)
2008年04月(5)
2008年03月(17)
2008年01月(6)
2007年11月(11)
2005年12月(2)
软件项目交易
订阅我的博客
如何将SQL Server表驻留内存和检测
收藏
新一篇: 利用typeperf工具收集SQL Server性能数据
|
旧一篇: 测试文章效果
将
SQL Server
数据表驻留内存是
SQL Server
提供的一项功能,在一般小型系统的开发过程中估计很少会涉及到。这里整理了相关文档资料,演示如何把
SQL Server
中一个表的所有数据都放入内存中,实现内存数据库,提高实时性。
Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
1, DBCC PINTABLE
Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
Marks a table to be pinned, which means Microsoft SQL Server
Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
does not flush the pages for the table from memory.
Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
Syntax
DBCC 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 int
Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
Use DATABASE_NAME
Eï~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 int
Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
Use DATABASE_NAME
Eï~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_TableOption
Eï~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Í
Syntax
sp_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Í
pintable
Eï~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. Conclusions
Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
将数据表设置为驻留内存时,并没有实际将表读入内存中,直到该表从被检索。因此,可以使用如下
SQL
指令进一步将数据表
Department
驻留内存:
Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
Select * From Department
Eï~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') > 0
Eï~U××;áÿwww.netcsharp.cnGG©ÓõÔ«7Í
发表于 @
2008年11月02日 22:09:00
|
评论(
loading...
)
|
收藏
新一篇: 利用typeperf工具收集SQL Server性能数据
|
旧一篇: 测试文章效果
评论:没有评论。
发表评论
姓 名:
主 页:
校验码:
看不清,换一张
登录