¿Cuánta memoria ocupa una mesa?

9

¿Hay alguna manera de averiguar cuánta memoria está ocupando una tabla en SQL Server (2005 y superior)?

Por ejemplo, supongamos que tengo una tabla con 30 millones de registros. Me gustaría saber cuántas páginas que pertenecen a esta tabla están actualmente en la memoria caché del búfer, incluidas las páginas de índice, datos y texto / imagen .

Encontré esta consulta de Pinal Dave , pero parece que esta consulta solo devuelve páginas asignadas por índices (ya sean agrupados o no agrupados).

Ivanmp
fuente
2
sp_spaceused devuelve datos sobre el tamaño almacenado en el disco, no lo que hay en la memoria / en la memoria caché del búfer.
Mark S. Rasmussen

Respuestas:

8
with bd as (
    select count(*) as pages_in_memory, bd.allocation_unit_id
    from sys.dm_os_buffer_descriptors bd
    where bd.database_id = db_id()
    group by bd.allocation_unit_id)
select p.object_id,
    p.index_id,
    p.partition_number,
    bd.pages_in_memory,
    au.total_pages as pages_on_disk,
    au.type_desc
from bd 
join sys.allocation_units au 
    on au.allocation_unit_id = bd.allocation_unit_id
join sys.partitions p
    on p.partition_id = au.container_id
Remus Rusanu
fuente
Si agrega algún comentario a su respuesta, lo seleccionaré. Tal como está, no es una respuesta, solo una pieza de código. (Sí, sé que funciona, pero ese no es mi punto)
Ivanmp