sys.dm_os_buffer_descriptors (Transact-SQL)

Применимо к:SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure Azure Synapse Analytics AnalyticsPlatform System (PDW)

Возвращает сведения обо всех страницах данных, которые в настоящее время находятся в буферном пуле SQL Server. Это представление может использоваться, чтобы определить распределение страниц баз данных в буферном пуле в соответствии с базой данных, объектом или типом. В SQL Server этот динамический режим управления также возвращает сведения о страницах данных в файле расширения буферного пула. Дополнительные сведения см. в разделе "Расширение буферного пула".

Когда страница данных считывается с диска, страница копируется в буферный пул SQL Server и кэшируется для повторного использования. Каждая страница данных в кэше имеет один дескриптор буфера. Дескрипторы буферов однозначно определяют каждую страницу данных, которая в настоящее время кэшируется в экземпляре SQL Server. sys.dm_os_buffer_descriptors возвращает кэшированные страницы для всех пользовательских и системных баз данных. В их число входят страницы, связанные с базой данных Resource.

Примечание.

Чтобы вызвать это из Azure Synapse Analytics или Analytics Platform System (PDW), используйте имя sys.dm_pdw_nodes_os_buffer_descriptors. Этот синтаксис не поддерживается бессерверным пулом SQL в Azure Synapse Analytics.

Имя столбца Тип данных Description
database_id int Идентификатор базы данных, связанный со страницей в буферном пуле. Допускает значение NULL.

В База данных SQL Azure значения уникальны в одной базе данных или эластичном пуле, но не в логическом сервере.
file_id int Идентификатор файла, хранящего постоянный образ страницы. Допускает значение NULL.
page_id int Идентификатор страницы в файле. Допускает значение NULL.
page_level int Индексный уровень страницы. Допускает значение NULL.
allocation_unit_id bigint Идентификатор единицы распределения страницы. Это значение может быть использовано для соединения sys.allocation_units. Допускает значение NULL.
page_type nvarchar(60) Тип страницы, например страницы данных или страницы индекса. Допускает значение NULL.
row_count int Количество строк на странице. Допускает значение NULL.
free_space_in_bytes int Объем доступного свободного места, в байтах, на странице. Допускает значение NULL.
is_modified bit 1 = страница была изменена после того, как она была считана с диска. Допускает значение NULL.
numa_node int Узел с неоднородным доступом к памяти для буфера. Допускает значение NULL.
read_microsec bigint Фактическое время (в миллисекундах), необходимое для считывания страницы в буфер. Счетчик сбрасывается, если буфер используется повторно. Допускает значение NULL.
is_in_bpool_extension bit 1 = страница находится в расширении буферного пула. Допускает значение NULL.
pdw_node_id int Область применения: Azure Synapse Analytics, Analytics Platform System (PDW)

Идентификатор узла, на который находится данное распределение.

Разрешения

На SQL Server и управляемом экземпляре SQL необходимо разрешение VIEW SERVER STATE.

Для целей службы База данных SQL Basic, S0 и S1, а также для баз данных в эластичных пулах, учетной записи администратора сервера, учетной записи администратора Microsoft Entra или членства в ##MS_ServerStateReader##роли сервера требуется. Для всех остальных целей обслуживания базы данных SQL требуется разрешение VIEW DATABASE STATE в базе данных или членство в роли сервера ##MS_ServerStateReader##.

Разрешения для SQL Server 2022 и более поздних версий

Требуется разрешение VIEW SERVER PERFORMANCE STATE на сервере.

Замечания

sys.dm_os_buffer_descriptors возвращает страницы, используемые базой данных ресурсов. sys.dm_os_buffer_descriptors не возвращает сведения о бесплатных или украденных страницах или о страницах с ошибками при чтении.

С дт. Кому Вкл Отношение
sys.dm_os_buffer_descriptors sys.databases database_id «многие к одному»
sys.dm_os_buffer_descriptors <userdb>.sys.allocation_units allocation_unit_id «многие к одному»
sys.dm_os_buffer_descriptors <userdb>.sys.database_files file_id «многие к одному»
sys.dm_os_buffer_descriptors sys.dm_os_buffer_pool_extension_configuration file_id «многие к одному»

Примеры

А. Получение количества страниц в кэше для каждой базы данных

Следующий пример возвращает количество страниц в кэше, загруженных для каждой базы данных.

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. Получение количества страниц в кэше для каждого объекта в текущей базе данных

Следующий пример возвращает количество страниц в кэше, загруженных для каждого объекта в текущей базе данных.

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;  

См. также

sys.allocation_units (Transact-SQL)

Динамические административные представления операционной системы SQL Server (Transact-SQL)
База данных Resource
sys.dm_os_buffer_pool_extension_configuration (Transact-SQL)