成人午夜激情影院,小视频免费在线观看,国产精品夜夜嗨,欧美日韩精品一区二区在线播放

SQL Server表駐留內(nèi)存和檢測

2010-08-28 10:49:52來源:西部e網(wǎng)作者:

將SQL Server數(shù)據(jù)表駐留內(nèi)存是SQL Server提供的一項功能,在一般小型系統(tǒng)的開發(fā)過程中估計很少會涉及到。這里整理了相關文檔資料,演示如何把SQL Server中一個表的所有數(shù)據(jù)都放入內(nèi)存中,實現(xiàn)內(nèi)存數(shù)據(jù)庫,提高實時性。 小蟲網(wǎng)絡技術

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 不會導致將表讀入到內(nèi)存中。當表中的頁由普通的 Transact-SQL 語句讀入到高速緩存中時,這些頁將標記為內(nèi)存駐留頁。當 SQL Server 需要空間以讀入新頁時,不會清空內(nèi)存駐留頁。SQL Server 仍然記錄對頁的更新,并且如有必要,將更新的頁寫回到磁盤。然而,在使用 DBCC UNPINTABLE 語句使該表不駐留之前,SQL Server 在高速緩存中一直保存可用頁的復本。

DBCC PINTABLE 最適用于將小的、經(jīng)常引用的表保存在內(nèi)存中。將小表的頁一次性讀入到內(nèi)存中,將來對其數(shù)據(jù)的所有引用都不需要從磁盤讀入。

注意 DBCC PINTABLE 可以提供性能改進,但是使用時務必小心。如果駐留大表,則該表在開始時會使用一大部分高速緩存,而不為系統(tǒng)中的其它表保留足夠的高速緩存。如果所駐留的表比高速緩存大,則該表會填滿整個高速緩存。sysadmin 固定服務器角色的某個成員必須關閉而后重新啟動 SQL Server,然后使表不駐留。駐留太多的表和駐留比高速緩存大的表會產(chǎn)生同樣的問題。

示例:

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設置為駐留內(nèi)存。 
<CENTER><ccid_nobr>
<table width="400" border="1" cellspacing="0" cellpadding="2" bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center">
<tr>
    <td bgcolor="e6e6e6" class="code" style="font-size:9pt">
    <pre><ccid_code>  
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取消設置為駐留內(nèi)存。

可以使用如下的SQL指令來檢測執(zhí)行情況:

Select ObjectProperty(Object_ID('Department'),'TableIsPinned')

如果返回結(jié)果為1:則表示該表已經(jīng)設置為駐留內(nèi)存;0:則表示沒有設置為駐留內(nèi)存。

2、SP_TableOption

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.

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. (可將指定的表駐留內(nèi)存)

另外,table lock on bulk load, insert row lock, text in row等等可選值,因不涉及將表駐留內(nèi)存,具體用法可以查詢SQL Server Books Online.

Value有如下用法:

the option_name is enabled (true, on, or 1) or disabled (false, off, or 0)

示例:

EXEC sp_tableoption 'Department','pintable', 'true'

將數(shù)據(jù)表Department駐留內(nèi)存

EXEC sp_tableoption 'Department','pintable', 'false'

取消數(shù)據(jù)表Department駐留內(nèi)存

可以使用如下的SQL指令來檢測執(zhí)行情況:

Select ObjectProperty(Object_ID('Department'),'TableIsPinned')

如果返回結(jié)果為1:則表示該表已經(jīng)設置為駐留內(nèi)存;0:則表示沒有設置為駐留內(nèi)存。

3、 Conclusions

將數(shù)據(jù)表設置為駐留內(nèi)存時,并沒有實際將表讀入內(nèi)存中,直到該表從被檢索。因此,可以使用如下SQL指令進一步將數(shù)據(jù)表Department駐留內(nèi)存:

Select * From Department

另外,可以使用如下SQL指令方便顯示/檢測數(shù)據(jù)庫Database中所有設置為駐留內(nèi)存的表:

SELECT * FROM INFORMATION_SCHEMA.Tables 
WHERE TABLE_TYPE = 'BASE TABLE' 
          AND OBJECTPROPERTY(object_id(TABLE_NAME), 'TableIsPinned') > 0

贊助商鏈接:

主站蜘蛛池模板: 左云县| 中卫市| 新和县| 金门县| 织金县| 广东省| 星子县| 沙湾县| 加查县| 出国| 紫金县| 班玛县| 永胜县| 自贡市| 柏乡县| 五家渠市| 南雄市| 双辽市| 东源县| 乐至县| 永年县| 长岭县| 叙永县| 克东县| 邻水| 永平县| 本溪| 城市| 涡阳县| 霍林郭勒市| 兰溪市| 洪湖市| 海晏县| 弋阳县| 晋州市| 白城市| 朝阳县| 邯郸市| 壤塘县| 阳江市| 保康县|