SQL Serverのキャッシュからテーブルをクリアするにはどうすればよいですか?


10

キャッシュすべきではないテーブルがデータベースにいくつかあります。

SQL Serverにテーブルのページをキャッシュしないように指示する方法、またはキャッシュから単一のテーブルをフラッシュする方法

すべてのキャッシュをフラッシュすることはオプションではありません。

SQL Server 2008とSQL Server 2008 R2を使用しています。


4
テーブルをキャッシュしてはいけないと決めた理由は何ですか?

3
テーブルがキャッシュされている場合は、クエリが実行されます。それらが頻繁にアクセスされない場合、SQL Serverのメモリマネージャーは、必要なときに他のオブジェクトに優先してそれらをフラッシュします。ここであなたの目標は何ですか?
John Sansom、2011

4
@John-OPの目標が何であるかわからないが、これが役立つ場合がある。たとえば、バッファプールをフラッシュせずに大きなテーブルに対して1回限りのスキャンを実行します。

3
いくつかの理由:低優先度テーブル、SQLサーバーと同じマシン上のiis / rs、電力使用量など。最も重要なのは、一部のテーブルがアプリケーションのパフォーマンスに関して低優先度テーブルであり、ディスクから安全に読み取れることですそれらがアクセスされるときはいつでも。これらのテーブルをバッファプールに入れないことで、メモリ分析が多少容易になります。
Catalin Adler

1
@ user973156:あなたのコードとデザインですその良いあなたは今、SQL Serverの唯一の第二の推測では、より良いものを作るためにできることは?
GBN、2011年

回答:


12

これを行う方法はありません。

DBCC DROPCLEANBUFFERS特定のデータベースまたはオブジェクトのパラメーターを受け入れません。内部的にSQL Serverはデータベースレベルでこれを実行できますが、データベースが作成AUTO_CLOSEされると、対応するすべてのページがバッファキャッシュから削除されます。

また、SQL Serverは内部的に、特定のページにマークを付けることができます。これはsys.dm_db_index_physical_statsこの記事で言及したようにバッファープールのフラッシュを回避するためなど、DMVによって使用されますが、この機能は私たちには公開されていません(1回限りのスキャンを実行する場合に同じものを指定できると便利かもしれませんが)大きなテーブルの例)。


7

特定のテーブルをキャッシュしないように指定することはできません。テーブルをキャッシュに入れたくないと思うのはなぜですか?

SQL Serverは通常の操作をすべてバッファープールで実行するため、SQL Serverにテーブルをキャッシュに読み込ませないように指示できた場合、そのテーブルには通常のDML操作ではアクセスできません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.