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;