http://www.cio360.net/Page/1808/InfoID/291578/SourceId/11281/PubDate/2009-02-03/Default.aspx#pager
SQL Server 7.0發布的版本之前,計畫快取是用於SQL Server的整個記憶體的單獨可配置快取區域。只有預存程序緩衝在緩衝的那個部分。由於這個原因,它被叫做程式緩衝,在SQL Server 7.0和後面的版本中,計畫快取不是SQL Server記憶體單獨的一個部分。現在SQL Server 是用一個非常動態整合記憶體管理和緩衝管理機制。
下面的指令碼用於SQL Server 2000和前面的版本。它將提供SQL Server 計畫快取的內容和使用頻率。
下面是SQL Server 2000指令碼#1的部分結果集。
圖一
對於SQL Server 2005和它更新的版本,DMV已經被引進來獲得這一資訊。因此要得到緩衝計劃的內容和使用統計資料,你可能要使用下面的DMV指令碼。
下面是SQL Server 2005指令碼#2的部分結果集。SQL Server 7.0的整個記憶體的單獨可配置快取區域。只有預存程序緩衝在緩衝的那個部分。由於這個原因,它被叫做程式緩衝,在SQL Server 7.0和後面的版本中,計畫快取不是SQL Server記憶體單獨的一個部分。現在SQL Server 是用一個非常動態整合記憶體管理和緩衝管理機制。
和前面的版本。它將提供SQL Server 計畫快取的內容和使用頻率。
指令碼#1的部分結果集。
和它更新的版本,DMV已經被引進來獲得這一資訊。因此要得到緩衝計劃的內容和使用統計資料,你可能要使用下面的DMV指令碼。
圖二
上述指令碼以及它們的描述所使用的整個領域如下:
下面是SQL Server 2005指令碼#2的部分結果集。
面是SQL Server 2005指令碼#2的部分結果集。
利 用上述指令碼你可以看到SQL Server中的對象和它們的使用頻率。記住對於SQL Server 2000,你需要使用系統資料表syscacheobjects而對於SQL Server 2005和更新的版本,主要使用DMV sys.dm_exec_cached_plans
當測試或者解決問題時,你可能需要清除計畫快取。你可以使用下面兩種命令來達到目的。
Script # 3: 清除整個SQL Server計畫快取 DBCC FREEPROCCACHE GO Script #4: 清除某個特定資料庫的SQL Server 計畫快取 DBCC FLUSHPROCINDB () GO /* You can get DBID through following command Select dbid from sysdatabases where name = <'DBName'> */ |
除了上面的命令,下面的操作也將重新整理整個計畫快取而新批需要新的計劃。
分離任何資料庫
在SQL Server 2005或更高版本中升級任何資料庫到相容性層級90或者更高
針對任何資料庫運行 ALTER DATABASE ... MODIFY FILEGROUP 命令
運行 ALTER DATABASE ... COLLATE來修改任何資料庫的校對
用下面任何一個命令來更改一個資料庫將會把緩衝在具體資料庫中的所有計劃都刪除掉。
ALTER DATABASE ..... MODIFY NAME
ALTER DATABASE ..... SET ONLINE
ALTER DATABASE ..... SET OFFLINE
ALTER DATABASE ..... SET EMERGENCY
下面的操作也會刪除一個具體資料庫的緩衝計劃。
刪除一個資料庫
資料庫自動關掉
這是與在這裡提及沒有一種方法可以把一個單獨的查詢計劃從SQL 2005和更低版本的緩衝中刪除有關,但是在SQL 2008中現在是可能的。