2005版本以後已經不支援 pintable 和 unpintable了1將sql server資料表駐留記憶體是sql server提供的一項功能,在一般小型系統的開發過程中估計很少會涉及到。
, dbcc
pintable
marks a
table
tobe pinned, which means microsoft sql server does
notflush the pagesforthe
table
from
memory.
syntaxdbcc
pintable ( database_id , table_id )
todetermine the
database
id,use
the
db_id
function.to
determine the
table
id,
usethe
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
intuse
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
intuse
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
foruser
-defined tables. sp_tableoption may be used
toturn
onthe
text
inrow feature
ontables
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
onbulk
load
, insert
row lock,
text
inrow等等可選值,因不涉及將表駐留記憶體,具體用法可以查詢sql server books online.
value有如下用法:
the option_name
isenabled (true,
on, or1
) or
disabled (false,
off, or0
) 示例: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
檢視表駐留
如何將SQL Server表駐留記憶體和檢測
將 sql server 資料表駐留記憶體是 sql server sql server 中乙個表的所有資料都放入記憶體中,實現記憶體資料庫,提高實時性。1,dbcc pintable marks a table to be pinned,which means microsoft sql serv...
如何將SQL Server表駐留記憶體和檢測
將sql server 資料表駐留記憶體是 sql server 提供的一項功能,在一般小型系統的開發過程中估計很少會涉及到。這裡整理了相關文件資料,演示如何把 sql server 中乙個表的所有資料都放入記憶體中,實現記憶體資料庫,提高實時性。1,dbcc pintable marks a ta...
如何將SQL Server表駐留記憶體和檢測
將sql server資料表駐留記憶體是sql server提供的一項功能,在一般小型系統的開發過程中估計很少會涉及到。這裡整理了相關文件資料,演示如何把sql server中乙個表的所有資料都放入記憶體中,實現記憶體資料庫,提高實時性。1,dbcc pintable marks a table t...