sys.dm_os_buffer_descriptors (Transact-SQL)
Применимо: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure azure Synapse Analytics Analytics Platform 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)