sys.dm_os_buffer_descriptors (Transact-SQL)
Возвращает сведения обо всех страницах данных, расположенных в данный момент в буферном пуле SQL Server. Это представление может использоваться, чтобы определить распределение страниц баз данных в буферном пуле в соответствии с базой данных, объектом или типом.
При считывании страницы данных с диска она копируется в буферный пул SQL Server и кэшируется для повторного использования. Каждая страница данных в кэше имеет один дескриптор буфера. Дескрипторы буфера уникально идентифицируют каждую страницу данных, кэшируемую в данный момент в экземпляре SQL Server. sys.dm_os_buffer_descriptors возвращает страницы в кэше для всех баз данных пользователя и системных баз данных. В их число входят страницы, связанные с базой данных Resource.
Имя столбца |
Тип данных |
Описание |
---|---|---|
database_id |
int |
Идентификатор базы данных, связанный со страницей в буферном пуле. Допускаются значения NULL. |
file_id |
int |
Идентификатор файла, хранящего постоянный образ страницы. Допускаются значения NULL. |
page_id |
int |
Идентификатор страницы в файле. Допускаются значения NULL. |
page_level |
int |
Индексный уровень страницы. Допускаются значения NULL. |
allocation_unit_id |
bigint |
Идентификатор единицы распределения страницы. Это значение может быть использовано для соединения sys.allocation_units. Допускаются значения NULL. Примечание sys.dm_os_buffer_descriptors может отображать несуществующие значения в allocation_unit_id для кластеризованных индексов, созданных в версиях SQL Server более ранних, чем SQL Server 2005. |
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. |
Разрешения
Необходимо разрешение VIEW SERVER STATE на сервере.
Замечания
sys.dm_os_buffer_descriptors, возвращает страницы, используемые базой данных Resource. 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 |
«многие к одному» |
Примеры
А.Получение количества страниц в кэше для каждой базы данных
Следующий пример возвращает количество страниц в кэше, загруженных для каждой базы данных.
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;
Б.Получение количества страниц в кэше для каждого объекта в текущей базе данных
Следующий пример возвращает количество страниц в кэше, загруженных для каждого объекта в текущей базе данных.
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)
Динамические административные представления и функции (Transact-SQL)