web-dev-qa-db-ja.com

FreeProcCacheとFreeSystemCacheの違い

現在、私はDBCC FREEPROCCACHE実行中のSQLクエリ間でバッファプールから情報を消去したい場合。しかし、私は this を参照しているTechnetの記事をレビューしていましたDBCC FREESYSTEMCACHEFREESYSTEMCACHEは、FREEPROCCACHEが消去しないキャッシュをどのキャッシュに消去しますか?

12
Sean Long

FREESYSTEMCACHEは、FREEPROCCACHEが消去しないキャッシュをどのキャッシュで消去しますか?

SQL Serverでは、多くのシステムキャッシュを使用できます。私はSQL 2008R2を参照しています(テストしたとおり)。

以下のクエリは、利用可能なすべてのキャッシュを返します。

--- ONLY for Educational purpose. Don't attempt to run on PROD !!

select 'DBCC freesystemcache ('+''''+name+''''+')'  from   sys.dm_os_memory_clerks group by name
-- 155 rows

たとえば実行するすべてのキャッシュをクリアしたい

DBCC FREESYSTEMCACHE ('ALL')

特定のキャッシュをクリアするには、実行できます

DBCC FREESYSTEMCACHE ('userdatabase') -- cleans cache for specific user database
DBCC FREESYSTEMCACHE ('tempdb')  -- clears cache for tempdb
DBCC FREESYSTEMCACHE ('Temporary Tables & Table Variables') -- clears all the temp table and variables
.. and many more (see above 155 rows returned from sql server 2008R2)

FREEPROCCACHEを使用すると、その詳細レベルで上記のすべてをクリアすることはできません。

FREEPROCCACHE ==> [〜#〜] bol [〜#〜] から

プランキャッシュからすべての要素を削除するか、プランハンドルまたはSQLハンドルを指定してプランキャッシュから特定のプランを削除するか、指定したリソースプールに関連付けられているすべてのキャッシュエントリを削除します。

したがって、本質的には、プランハンドルやプール名を使用して特定のプランをキャッシュから削除する機能を備えたプランキャッシュにのみ関連すると考えることができます。

Fun With DBCC FREEPROCCACHE はGlenn Berryのブログです

25
Kin Shah