Freigeben über


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)