sys.dm_os_buffer_descriptors (Transact-SQL)
適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
SQL Server バッファー プールに現在存在するすべてのデータ ページに関する情報を返します。 このビューの出力を使用して、データベース、オブジェクト、または型に応じてバッファー プール内のデータベース ページの分布を決定できます。 SQL Server では、この動的管理ビューは、バッファー プール拡張ファイル内のデータ ページに関する情報も返します。 詳細については、「 バッファー プール拡張機能」を参照してください。
データ ページがディスクから読み取られた場合、ページは SQL Server バッファー プールにコピーされ、再利用のためにキャッシュされます。 キャッシュされた各データ ページには、1 つのバッファー記述子があります。 バッファー記述子は、SQL Server のインスタンスに現在キャッシュされている各データ ページを一意に識別します。 sys.dm_os_buffer_descriptorsは、すべてのユーザー データベースとシステム データベースのキャッシュされたページを返します。 これには、リソース データベースに関連付けられているページが含まれます。
Note
これを Azure Synapse Analytics または Analytics Platform System (PDW) から呼び出すには、 sys.dm_pdw_nodes_os_buffer_descriptorsという名前を使用します。 この構文は、Azure Synapse Analytics のサーバーレス SQL プールでサポートされていません。
列名 | データ型 | 説明 |
---|---|---|
database_id | int | バッファー プール内のページに関連付けられているデータベースの ID。 NULL 値が許可されます。 Azure SQL Database では、値は 1 つのデータベースまたは Elastic Pool 内で一意ですが、論理サーバー内では一意ではありません。 |
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 Basic、S0、および S1 サービス目標、および弾性プール内のデータベースの場合サーバー管理者アカウント、Microsoft Entra 管理者アカウント、または##MS_ServerStateReader##
サーバー ロールのメンバーシップが必要です。 他のすべての SQL Database サービス目標では、データベースに対する VIEW DATABASE STATE
アクセス許可または ##MS_ServerStateReader##
サーバー ロールのメンバーシップのいずれかが必要です。
SQL Server 2022 以降でのアクセス許可
サーバーに対する VIEW SERVER PERFORMANCE STATE アクセス許可が必要です。
解説
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)