sys.dm_os_buffer_descriptors (Transact-SQL)

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

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

Применимо для следующих объектов: SQL Server (начиная с SQL Server 2008 до текущей версии).

Имя столбца

Тип данных

Описание

database_id

int

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

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.

Разрешения

Необходимо разрешение 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

«многие к одному»

sys.dm_os_buffer_descriptors

sys.dm_os_buffer_pool_extension_configuration

file_id

«многие к одному»

Примеры

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

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

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)

Динамические административные представления, относящиеся к операционной системе SQL Server (Transact-SQL)

sys.dm_os_buffer_pool_extension_configuration (Transact-SQL)

Основные понятия

База данных Resource