データベースバッファキャッシュ


SQLServerはデフォルトで物理メモリのある限り、データベースバッファキャッシュとしてメモリを使用する。
なので、タスクマネージャでメモリを目一杯使用していてもメモリリークしているとは限らない。


サーバ上で動作しているのがSQLServerのみであれば上記のデフォルト設定のままでも問題はないが、
APサーバと兼用している場合などはSQLServerで使用するメモリの上限を設定しておくほうがよい。


なお、テーブル毎に使用しているデータベースバッファキャッシュを調べるSQLは以下の通り。

SELECT 
  DB_NAME(b.database_id)   as データベース,
  OBJECT_NAME(p.object_id) as テーブル,
  p.index_id
 ,COUNT(*) As 使用ページ数
 ,(COUNT(*) * 8) as 使用サイズ_KB
FROM
 sys.allocation_units a
  INNER JOIN sys.partitions p ON a.container_id = p.hobt_id
  INNER JOIN sys.dm_os_buffer_descriptors b
      ON a.allocation_unit_id = b.allocation_unit_id
WHERE b.database_id = DB_ID()   --現在接続中のDB のみ
GROUP BY b.database_id, p.object_id, p.index_id
ORDER BY 使用ページ数 DESC

SQLServerのページサイズは1ページあたり8KB


以下のSQLでデータベースバッファキャッシュを開放できる。
ただし、SQLServer内で開放するだけなのでSQLServer全体が使用しているメモリが開放されるわけではない。

DBCC DROPCLEANBUFFERS


動作確認環境:SQL Server 2008