Quanta memória uma mesa está ocupando?

9

Existe uma maneira de descobrir quanta memória uma tabela está ocupando no SQL Server (2005 e superior)?

Por exemplo, suponha que eu tenha uma tabela com 30 milhões de registros. Gostaria de saber quantas páginas pertencentes a esta tabela estão atualmente no cache do buffer, incluindo páginas de índice, dados e texto / imagem .

Encontrei essa consulta de Pinal Dave , mas parece que ela retorna apenas páginas alocadas por índices (sejam agrupados ou não-agrupados).

ivanmp
fonte
2
sp_spaceused retorna dados sobre o tamanho armazenado no disco, não o que está na memória / no cache do buffer.
Mark S. Rasmussen

Respostas:

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
fonte
Se você adicionar algum comentário à sua resposta, eu o selecionarei. Tal como está, não é uma resposta, apenas um pedaço de código. (Sim, eu sei que funciona, mas isso não é o meu ponto.)
ivanmp