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

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

贊助商鏈接:

主站蜘蛛池模板: 长垣县| 阿克陶县| 扶绥县| 确山县| 兴隆县| 新巴尔虎左旗| 衡阳市| 上饶市| 宣汉县| 彩票| 临安市| 阳春市| 余庆县| 灵武市| 河东区| 开远市| 阳新县| 罗江县| 阳信县| 东平县| 闽侯县| 兰西县| 东城区| 新乡市| 双桥区| 屯留县| 临汾市| 安康市| 汤原县| 巍山| 高淳县| 镇宁| 汾阳市| 瓮安县| 八宿县| 尉氏县| 长春市| 太保市| 屏山县| 伊金霍洛旗| 南康市|