¿Cómo ver qué se almacena en la memoria caché en SQL Server 2008?


13

¿Hay alguna forma de averiguar qué se almacena en caché en SQL Server 2008 R2? He encontrado el siguiente buen artículo: http://blog.sqlauthority.com/2010/06/17/sql-server-data-pages-in-buffer-pool-data-stored-in-memory-cache . Sin embargo, me gustaría saber cuántos datos (por ejemplo, en porcentaje y KB) se almacenan de cada tabla e índice. ¿Hay alguna manera simple de cómo obtener tales datos?

Respuestas:


16

Puede encontrar lo que está almacenado en el grupo de búferes (caché de datos) utilizando la siguiente consulta:

Desde aquí :

select
       count(*)as cached_pages_count,
       obj.name as objectname,
       ind.name as indexname,
       obj.index_id as indexid
from sys.dm_os_buffer_descriptors as bd
    inner join
    (
        select       object_id as objectid,
                           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_id as objectid,
                           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
left outer join sys.indexes ind 
  on  obj.objectid = ind.object_id
 and  obj.index_id = ind.index_id
where bd.database_id = db_id()
  and bd.page_type in ('data_page', 'index_page')
group by obj.name, ind.name, obj.index_id
order by cached_pages_count desc

Excelente referencia: dentro del motor de almacenamiento: ¿qué hay en el grupo de búferes? por Paul Randal.


5

Puede usar la vista de administración dinámica para enumerar las páginas actualmente en caché y filtrarlas por database_id:

   select top 100 * from sys.dm_os_buffer_descriptors

Luego puede ver el DBCC PAGEcomando para enumerar las páginas de un objeto. Buena referencia: http://www.mssqltips.com/sqlservertip/1578/using-dbcc-page-to-examine-sql-server-table-and-index-data/

Sin embargo, dependerá de usted combinar los resultados, y no parece una tarea fácil :). Avísanos cuando encuentres una manera efectiva de hacer esto.


0

Pruebe esta consulta SQL:

select count(*)*8/1024 AS 'Cached Size (MB)'        
,case database_id                
when 32767 then 'ResourceDB'                
else db_name(database_id)                
end as 'Database'
from sys.dm_os_buffer_descriptors
where page_type in
(
'INDEX_PAGE'
,'DATA_PAGE'
)
group by db_name(database_id), database_id
order by 'Cached Size (MB)' desc
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.