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

2021-06-11 16:58:53 字數 4423 閱讀 9933

2005版本以後已經不支援 pintable 和 unpintable了

將sql server資料表駐留記憶體是sql server提供的一項功能,在一般小型系統的開發過程中估計很少會涉及到。

1

, dbcc

pintable

marks a

table

tobe pinned, which means microsoft sql server does

notflush the pages 

forthe

table

from

memory.

syntax
dbcc

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