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;