將sql server
資料表駐留記憶體是
sql server
提供的一項功能,在一般小型系統的開發過程中估計很少會涉及到。這裡整理了相關文件資料,演示如何把
sql server
中乙個表的所有資料都放入記憶體中,實現記憶體資料庫,提高實時性。
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
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
,然後使表不駐留。駐留太多的表和駐留比快取記憶體大的表會產生同樣的問題。
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
示例: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_tableoptionmay be used to turn on thetext in rowfeature on tables withtext,ntext, orimagecolumns.
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, 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 * frominformation_schema.tables
where table_type = 'base table'
and objectproperty(object_id(table_name), 'tableispinned') > 0
如何將SQL Server表駐留記憶體和檢測
2005版本以後已經不支援 pintable 和 unpintable了 將sql server資料表駐留記憶體是sql server提供的一項功能,在一般小型系統的開發過程中估計很少會涉及到。1 dbcc pintable marks a table tobe pinned,which means...
如何將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 table t...