如何將SQL Server表駐留記憶體和檢測

2021-09-05 13:24:25 字數 3860 閱讀 4235

將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...