Share via


sys.dm_os_buffer_descriptors (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform Systeem (PDW)SQL-database in Microsoft Fabric

Geeft informatie terug over alle datapagina's die momenteel in de SQL Server-bufferpool staan. De output van deze weergave kan worden gebruikt om de verdeling van databasepagina's in de bufferpool te bepalen volgens database, object of type. In SQL Server geeft deze dynamische beheerweergave ook informatie terug over de datapagina's in het bufferpool-extensiebestand. Voor meer informatie, zie Buffer Pool Extension.

Wanneer een datapagina van de schijf wordt gelezen, wordt de pagina gekopieerd naar de SQL Server-bufferpool en gecachet voor hergebruik. Elke gecachte datapagina heeft één bufferdescriptor. Bufferdescriptors identificeren uniek elke datapagina die momenteel in een instantie van SQL Server is gecached. sys.dm_os_buffer_descriptors levert gecachte pagina's terug voor alle gebruikers- en systeemdatabases. Dit omvat pagina's die gekoppeld zijn aan de Resource-database.

Opmerking

Om dit aan te roepen vanuit Azure Synapse Analytics of Analytics Platform System (PDW), gebruik de naam sys.dm_pdw_nodes_os_buffer_descriptors. Deze syntaxis wordt niet ondersteund door een serverloze SQL-pool in Azure Synapse Analytics.

Kolomnaam Gegevenstype Description
database_id int ID van de database die aan de pagina in de bufferpool is gekoppeld. Is null-waarde.

In Azure SQL Database zijn de waarden uniek binnen één database of een elastische pool, maar niet binnen een logische server.
file_id int ID van het bestand dat de behouden afbeelding van de pagina opslaat. Is null-waarde.
page_id int ID van de pagina binnen het bestand. Is null-waarde.
page_level int Indexniveau van de pagina. Is null-waarde.
allocation_unit_id bigint ID van de toewijzingseenheid van de pagina. Deze waarde kan worden gebruikt om sys.allocation_units te joinen. Is null-waarde.
page_type nvarchar(60) Type pagina, zoals: Datapagina of Indexpagina. Is null-waarde.
row_count int Aantal rijen op de pagina. Is null-waarde.
free_space_in_bytes int Hoeveelheid beschikbare vrije ruimte, in bytes, op de pagina. Is null-waarde.
is_modified bit 1 = Pagina is aangepast nadat deze van de schijf is gelezen. Is null-waarde.
numa_node int Nonuniform Memory Access-knooppunt voor de buffer. Is null-waarde.
read_microsec bigint De werkelijke tijd (in microseconden) die nodig is om de pagina in de buffer te lezen. Dit nummer wordt gereset wanneer de buffer opnieuw wordt gebruikt. Is null-waarde.
is_in_bpool_extension bit 1 = De pagina bevindt zich in de bufferpool-extensie. Is null-waarde.
pdw_node_id int van toepassing op: Azure Synapse Analytics, Analytics Platform System (PDW)

De id voor het knooppunt waarop deze distributie zich bevindt.

Permissions

Voor SQL Server en SQL Managed Instance is een machtiging vereist VIEW SERVER STATE .

Voor servicedoelstellingen van SQL Database Basic, S0 en S1 en voor databases in elastische pools is het serverbeheerdersaccount , het Microsoft Entra-beheerdersaccount of het lidmaatschap van de ##MS_ServerStateReader##serverrol vereist. Voor alle andere SQL Database-servicedoelstellingen is de VIEW DATABASE STATE machtiging voor de database of het lidmaatschap van de ##MS_ServerStateReader## serverfunctie vereist.

Machtigingen voor SQL Server 2022 en hoger

Vereist de machtiging PRESTATIESTATUS VAN DE WEERGAVESERVER op de server.

Opmerkingen

sys.dm_os_buffer_descriptors levert pagina's terug die door de Resource-database worden gebruikt. sys.dm_os_buffer_descriptors geeft geen informatie terug over gratis of gestolen pagina's, of over pagina's die fouten hadden bij het lezen.

Van Tot On Relatie
sys.dm_os_buffer_descriptors sys.databases database_id veel-op-een
sys.dm_os_buffer_descriptors <userdb>.sys.allocation_units allocation_unit_id veel-op-een
sys.dm_os_buffer_descriptors <userdb>.sys.database_files file_id veel-op-een
sys.dm_os_buffer_descriptors sys.dm_os_buffer_pool_extension_configuration file_id veel-op-een

Voorbeelden

Eén. Het teruggeven van gecachet paginatelling voor elke database

Het volgende voorbeeld geeft het aantal geladen pagina's voor elke database terug.

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. Het teruggeven van gecachete paginatelling voor elk object in de huidige database

Het volgende voorbeeld geeft het aantal geladen pagina's voor elk object in de huidige database terug.

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;  

Zie ook

sys.allocation_units (Transact-SQL)

Dynamische beheerweergaven van SQL Server-besturingssysteem (Transact-SQL)
Bronnendatabase
sys.dm_os_buffer_pool_extension_configuration (Transact-SQL)