sys.dm_os_buffer_descriptors (Transact-SQL)

適用対象:Database Azure Synapse Analytics Analytics Platform System (PDW) Azure SQL SQL Server (サポートされているすべてのバージョン)

SQL Server バッファー プールに現在存在するすべてのデータ ページに関する情報を返します。 このビューの出力を使用して、データベース、オブジェクト、または型に従って、バッファー プール内のデータベース ページの分布を決定できます。 SQL Serverでは、この動的管理ビューは、バッファー プール拡張ファイル内のデータ ページに関する情報も返します。 詳細については、「 バッファー プール拡張機能」を参照してください。

データ ページがディスクから読み取られた場合、ページはSQL Server バッファー プールにコピーされ、再利用のためにキャッシュされます。 キャッシュされた各データ ページには、1 つのバッファー記述子があります。 バッファー記述子は、SQL Serverのインスタンスに現在キャッシュされている各データ ページを一意に識別します。 sys.dm_os_buffer_descriptorsは、すべてのユーザー データベースとシステム データベースのキャッシュされたページを返します。 これには、リソース データベースに関連付けられているページが含まれます。

注意

これを Azure Synapse Analytics または Analytics Platform System (PDW) から呼び出すには、sys.dm_pdw_nodes_os_buffer_descriptorsという名前を使用します。 この構文は、Azure Synapse Analytics のサーバーレス SQL プールでサポートされていません。

列名 データ型 説明
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 値が許可されます。
page_type nvarchar(60) ページの種類 (データ ページやインデックス ページなど)。 NULL 値が許可されます。
row_count int ページ上の行数。 NULL 値が許可されます。
free_space_in_bytes int ページ上の使用可能な空き領域の量 (バイト単位)。 NULL 値が許可されます。
is_modified bit 1 = ディスクからの読み取り後にページが変更されました。 NULL 値が許可されます。
numa_node int バッファーの Nonuniform Memory Access ノード。 NULL 値が許可されます。
read_microsec bigint ページをバッファーに読み込むのに必要な実際の時間 (マイクロ秒単位)。 この数値は、バッファーが再利用されるときにリセットされます。 NULL 値が許可されます。
is_in_bpool_extension bit 1 = ページはバッファー プール拡張機能内にあります。 NULL 値が許可されます。
pdw_node_id int 適用対象: Azure Synapse Analytics、Analytics Platform System (PDW)

このディストリビューションがオンになっているノードの識別子。

アクセス許可

SQL Server と SQL Managed Instance では、VIEW SERVER STATE アクセス許可が必要です。

SQL Database BasicS0、および S1 のサービス目標、およびエラスティック プール内のデータベースの場合、サーバー管理者アカウント、Azure Active Directory 管理者アカウント、または ##MS_ServerStateReader##サーバー ロールのメンバーシップが必要です。 他のすべての SQL Database サービス目標では、データベースに対する VIEW DATABASE STATE アクセス許可または ##MS_ServerStateReader## サーバー ロールのメンバーシップのいずれかが必要です。

解説

sys.dm_os_buffer_descriptorsは、リソース データベースで使用されているページを返します。 sys.dm_os_buffer_descriptorsは、無料または盗難に関するページや、読み取り時にエラーが発生したページに関する情報を返しません。

差出人 終了 オン リレーションシップ
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 多対一
sys.dm_os_buffer_descriptors sys.dm_os_buffer_pool_extension_configuration 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;  

参照

sys.allocation_units (Transact-SQL)

SQL Server オペレーティングシステム関連の動的管理ビュー (Transact-sql)
Resource データベース
sys.dm_os_buffer_pool_extension_configuration (Transact-SQL)