一个表占用多少内存?


9

有没有办法找出一个表在SQL Server(2005及更高版本)中占用了多少内存?

例如,假设我有一个包含3000万条记录的表。我想知道缓冲区高速缓存中当前有多少个属于此表的页面,包括索引,数据和文本/图像页面

我是通过Pinal Dave找到此查询的,但似乎此查询仅返回按索引分配的页面(无论是聚集的还是未聚集的页面)。


2
sp_spaceused返回有关存储在磁盘上的大小的数据,而不是内存/缓冲区高速缓存中的大小的数据。
Mark S. Rasmussen'2

Answers:


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

如果您在答案中添加评论,我会选择它。就目前而言,这不是答案,而只是一段代码。(是的,我知道它
可行
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.