sys.dm_os_buffer_descriptors (Transact-SQL)
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
Gibt Informationen zu allen Datenseiten zurück, die sich derzeit im SQL Server-Pufferpool befinden. Die Ausgabe dieser Sicht kann verwendet werden, um die Verteilung der Datenbankseiten im Pufferpool gemäß der Datenbank, des Objekts oder des Typs zu bestimmen. In SQL Server gibt diese dynamische Verwaltungsansicht auch Informationen zu den Datenseiten in der Pufferpoolerweiterungsdatei zurück. Weitere Informationen finden Sie unter Pufferpoolerweiterung.
Wenn eine Datenseite vom Datenträger gelesen wird, wird die Seite in den SQL Server-Pufferpool kopiert und zur Wiederverwendung zwischengespeichert. Jede zwischengespeicherte Datenseite verfügt über einen Pufferdeskriptor. Pufferdeskriptoren identifizieren eindeutig jede Datenseite, die derzeit in einer Instanz von SQL Server zwischengespeichert wird. sys.dm_os_buffer_descriptors gibt zwischengespeicherte Seiten für alle Benutzer- und Systemdatenbanken zurück. Dazu zählen auch Seiten, die der Ressourcendatenbank zugeordnet sind.
Hinweis
Um dies von Azure Synapse Analytics oder Analytics Platform System (PDW) aufzurufen, verwenden Sie den Namen sys.dm_pdw_nodes_os_buffer_descriptors. Diese Syntax wird vom serverlosen SQL-Pool in Azure Synapse Analytics nicht unterstützt.
Spaltenname | Datentyp | Beschreibung |
---|---|---|
database_id | int | ID der Datenbank, die der Seite im Pufferpool zugeordnet ist. Lässt NULL-Werte zu. In Azure SQL-Datenbank sind die Werte innerhalb einer einzelnen Datenbank oder eines Pools für elastische Datenbanken eindeutig, aber nicht innerhalb eines logischen Servers. |
file_id | int | ID der Datei, die das persistente Image der Seite speichert. Lässt NULL-Werte zu. |
page_id | int | ID der Seite innerhalb der Datei. Lässt NULL-Werte zu. |
page_level | int | Indexebene der Seite. Lässt NULL-Werte zu. |
allocation_unit_id | bigint | ID der Zuordnungseinheit der Seite. Dieser Wert kann für den Join mit sys.allocation_units verwendet werden. Lässt NULL-Werte zu. |
page_type | nvarchar(60) | Typ der Seite, z. B. Datenseite oder Indexseite. Lässt NULL-Werte zu. |
row_count | int | Anzahl der Zeilen auf der Seite. Lässt NULL-Werte zu. |
free_space_in_bytes | int | Umfang des verfügbaren Speicherplatzes auf der Seite (in Byte). Lässt NULL-Werte zu. |
is_modified | bit | 1 = Seite wurde nach dem Lesen vom Datenträger geändert. Lässt NULL-Werte zu. |
numa_node | int | NUMA-Knoten (Non-Uniform Memory Access) für den Puffer. Lässt NULL-Werte zu. |
read_microsec | bigint | Die tatsächliche Zeit (in Mikrosekunden), die erforderlich ist, um die Seite in den Puffer einzulesen. Diese Zahl wird zurückgesetzt, wenn der Puffer wiederverwendet wird. Lässt NULL-Werte zu. |
is_in_bpool_extension | bit | 1 = Seite befindet sich in der Pufferpoolerweiterung. Lässt NULL-Werte zu. |
pdw_node_id | int | Gilt für: Azure Synapse Analytics, Analytics Platform System (PDW) Der Bezeichner für den Knoten, auf dem sich diese Verteilung befindet. |
Berechtigungen
Für SQL Server und SQL Managed Instance ist die VIEW SERVER STATE
-Berechtigung erforderlich.
Für die SQL-Datenbank-Ziele Basic, S0 und S1 sowie für Datenbanken in Pools für elastische Datenbanken ist das Konto des Serveradministrators oder des Microsoft Entra-Administratorkontos oder die Mitgliedschaft in der ##MS_ServerStateReader##
Serverrolle erforderlich. Für alle anderen SQL-Datenbank-Dienstziele ist entweder die VIEW DATABASE STATE
-Berechtigung für die Datenbank oder die Mitgliedschaft in der ##MS_ServerStateReader##
-Serverrolle erforderlich.
Berechtigungen für SQL Server 2022 und höher
Erfordert die VIEW SERVER PERFORMANCE STATE-Berechtigung auf dem Server.
Hinweise
sys.dm_os_buffer_descriptors gibt Seiten zurück, die von der Ressourcendatenbank verwendet werden. sys.dm_os_buffer_descriptors gibt keine Informationen zu kostenlosen oder gestohlenen Seiten oder über Seiten zurück, die beim Lesen Fehler hatten.
From | Beschreibung | Ein | Beziehung |
---|---|---|---|
sys.dm_os_buffer_descriptors | sys.databases | database_id | n:1 |
sys.dm_os_buffer_descriptors | <userdb>.sys.allocation_units | allocation_unit_id | n:1 |
sys.dm_os_buffer_descriptors | <userdb>.sys.database_files | file_id | n:1 |
sys.dm_os_buffer_descriptors | sys.dm_os_buffer_pool_extension_configuration | file_id | n:1 |
Beispiele
A. Zurückgeben der zwischengespeicherten Seitenanzahl für jede Datenbank
Im folgenden Beispiel wird die für jede Datenbank geladene Seitenanzahl zurückgegeben.
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. Zurückgeben der zwischengespeicherten Seitenanzahl für jedes Objekt in der aktuellen Datenbank
Im folgenden Beispiel wird die für jedes Objekt in der aktuellen Datenbank geladene Seitenanzahl zurückgegeben.
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;
Siehe auch
sys.allocation_units (Transact-SQL)
Dynamische Verwaltungssichten in Verbindung mit dem SQL Server-Betriebssystem (Transact-SQL)
Ressourcendatenbank
sys.dm_os_buffer_pool_extension_configuration (Transact-SQL)