Combien de mémoire prend une table?

9

Existe-t-il un moyen de connaître la quantité de mémoire occupée par une table dans SQL Server (2005 et versions ultérieures)?

Par exemple, supposons que j'ai une table avec 30 millions d'enregistrements. Je voudrais savoir combien de pages appartenant à cette table sont actuellement dans le cache de tampon, y compris les pages d'index, de données et de texte / image .

J'ai trouvé cette requête par Pinal Dave , mais il semble que cette requête ne renvoie que les pages allouées par les index (qu'ils soient en cluster ou non).

ivanmp
la source
2
sp_spaceused renvoie des données sur la taille stockée sur le disque, pas ce qui est en mémoire / dans le cache de tampon.
Mark S. Rasmussen

Réponses:

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
la source
Si vous ajoutez un commentaire à votre réponse, je le sélectionnerai. En l'état, ce n'est pas une réponse, juste un morceau de code. (Oui, je sais que cela fonctionne, mais ce n'est pas mon point.)
ivanmp