Freigeben über


sys.dm_os_buffer_descriptors (Transact-SQL)

Gibt Informationen zu allen Datenseiten zurück, die derzeit im SQL Server-Pufferpool sind. Die Ausgabe dieser Sicht kann verwendet werden, um die Verteilung der Datenbankseiten im Pufferpool gemäß der Datenbank, des Objekts oder des Typs zu bestimmen.

Beim Lesen einer Datenseite vom Datenträger wird die Seite in den SQL Server-Pufferpool kopiert und für die Wiederverwendung zwischengespeichert. Jede zwischengespeicherte Datenseite verfügt über einen Pufferdeskriptor. Pufferdeskriptoren identifizieren jede Datenseite eindeutig, die derzeit in einer Instanz von SQL Server zwischengespeichert ist. 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.

Spaltenname

Datentyp

Beschreibung

database_id

int

ID der Datenbank, die der Seite im Pufferpool zugeordnet ist. Lässt NULL-Werte zu.

file_id

int

ID der Datei, die das permanente 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.

Hinweissys.dm_os_buffer_descriptors zeigt möglicherweise nicht vorhandene Werte in allocation_unit_id für gruppierte Indizes an, die in Versionen von SQL Server vor SQL Server 2005 erstellt wurden.

page_type

nvarchar(60)

Typ der Seite, z. B. Datenseite oder Indexseite. Lässt NULL-Werte zu. Weitere Informationen finden Sie unter Grundlegendes zu Seiten und Blöcken.

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_mode

int

NUMA-Knoten (Non-Uniform Memory Access) für den Puffer.

Berechtigungen

Erfordert die VIEW SERVER STATE-Berechtigung auf dem Server.

Hinweise

sys.dm_os_buffer_descriptors gibt Seiten zurück, die von der Resource-Datenbank verwendet werden. sys.dm_os_buffer_descriptors gibt keine Informationen zu freien oder gestohlenen Seiten zurück oder zu Seiten, die beim Lesen Fehler enthielten.

Von

In

On

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

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;