sys.dm_os_buffer_descriptors (Transact-SQL)
現在、SQL Server のバッファー プールにあるすべてのデータ ページに関する情報を返します。このビューの出力は、バッファー プール内のデータベース ページのディストリビューションをデータベース、オブジェクト、または種類に従って決定するために使用できます。
ディスクから読み込まれたデータ ページは、SQL Server のバッファー プールにコピーされ、再使用に備えてキャッシュされます。キャッシュされたデータ ページには、それぞれ 1 つのバッファー記述子が割り当てられます。このバッファー記述子により、SQL Server インスタンスに現在キャッシュされている各データ ページが一意に識別されます。sys.dm_os_buffer_descriptors は、すべてのユーザー データベースおよびシステム データベースのキャッシュ ページを返します。これには、リソース データベースに関連付けられているページも含まれます。
列名 |
データ型 |
説明 |
---|---|---|
database_id |
int |
バッファー プール内のページに関連付けられているデータベースの ID。NULL 値は許可されます。 |
file_id |
int |
ページに関連する保存済みの画像を格納するファイルの ID。NULL 値は許可されます。 |
page_id |
int |
ファイル内のページの ID。NULL 値は許可されます。 |
page_level |
int |
ページのインデックス レベル。NULL 値は許可されます。 |
allocation_unit_id |
bigint |
ページのアロケーション ユニットの ID。この値は sys.allocation_units の結合に使用できます。NULL 値は許可されます。 注 SQL Server 2005 より前のバージョンの SQL Server で作成されたクラスター化インデックスの場合、sys.dm_os_buffer_descriptors によって、allocation_unit_id に存在しない値が返されることがあります。 |
page_type |
nvarchar(60) |
ページの種類。データ ページ、インデックス ページなどがあります。NULL 値は許可されます。詳細については、「ページとエクステントについて」を参照してください。 |
row_count |
int |
ページの行数。NULL 値は許可されます。 |
free_space_in_bytes |
int |
使用できるページの空き領域 (バイト単位)。NULL 値は許可されます。 |
is_modified |
bit |
1 = ディスクからの読み取り後にページが変更されました。NULL 値は許可されます。 |
numa_mode |
int |
バッファーの Nonuniform Memory Access ノード。 |
権限
サーバーに対する VIEW SERVER STATE 権限が必要です。
説明
sys.dm_os_buffer_descriptors では、Resource データベースで使用されているページが返されます。空きページや他で使用されているページ、または読み取り中にエラーが発生したページに関する情報は返されません。
関連元 |
関連先 |
基準 |
リレーションシップ |
---|---|---|---|
sys.dm_os_buffer_descriptors |
sys.databases |
database_id |
多対一 |
sys.dm_os_buffer_descriptors |
<userdb>.sys.allocation_units |
allocation_unit_id |
多対一 |
sys.dm_os_buffer_descriptors |
<userdb>.sys.database_files |
file_id |
多対一 |
例
A. 各データベースのキャッシュ ページ数を返す
次の例では、各データベースについて、読み込まれたページ数を返します。
SELECT count(*)AS cached_pages_count
,CASE database_id
WHEN 32767 THEN 'ResourceDb'
ELSE db_name(database_id)
END AS Database_name
FROM sys.dm_os_buffer_descriptors
GROUP BY db_name(database_id) ,database_id
ORDER BY cached_pages_count DESC;
B. 現在のデータベース内の各オブジェクトのキャッシュ ページ数を返す
次の例では、現在のデータベース内の各オブジェクトについて、読み込まれたページ数を返します。
SELECT count(*)AS cached_pages_count
,name ,index_id
FROM sys.dm_os_buffer_descriptors AS bd
INNER JOIN
(
SELECT object_name(object_id) AS name
,index_id ,allocation_unit_id
FROM sys.allocation_units AS au
INNER JOIN sys.partitions AS p
ON au.container_id = p.hobt_id
AND (au.type = 1 OR au.type = 3)
UNION ALL
SELECT object_name(object_id) AS name
,index_id, allocation_unit_id
FROM sys.allocation_units AS au
INNER JOIN sys.partitions AS p
ON au.container_id = p.partition_id
AND au.type = 2
) AS obj
ON bd.allocation_unit_id = obj.allocation_unit_id
WHERE database_id = db_id()
GROUP BY name, index_id
ORDER BY cached_pages_count DESC;