--ref: http://searchsqlserver.techtarget.com/tip/0,289483,sid87_gci1334856,00.html
--蠏谿 豢 .
use master;
create table #temp
(
db_name nvarchar(255)
, schema_name nvarchar(255)
, table_name nvarchar(255)
, memory_space_MB int
, storage_space_MB bigint
, percentage_of_object_in_memory numeric(18,2)
)
declare
@dbname nvarchar(500)
, @sql nvarchar(4000)
declare cur cursor for
select
name
from sys.sysdatabases;
open cur;
fetch next from cur into @dbname
while @@fetch_status not in (-1, -2)
begin
set @sql = '
use ' + @dbname + ';
select
db_name() dbname
, schema_name(sys.tables.schema_id) schemaname
, sys.tables.name tablename
, sum(a.page_id)*8/1024 as mmb
, sum(sys.allocation_units.data_pages)*8/1024 as smb
, case
when sum(sys.allocation_units.data_pages) <> 0 then
sum(a.page_id)/cast(sum(sys.allocation_units.data_pages) as numeric(18,2))
end as ''obj_in_memory''
from
(
select
database_id,
allocation_unit_id,
count(page_id) page_id
from sys.dm_os_buffer_descriptors
group by database_id, allocation_unit_id) a
inner join sys.allocation_units
on a.allocation_unit_id = sys.allocation_units.allocation_unit_id
inner join sys.partitions
on (sys.allocation_units.type in (1,3)
and sys.allocation_units.container_id = sys.partitions.hobt_id)
or (sys.allocation_units.type = 2
and sys.allocation_units.container_id = sys.partitions.partition_id)
inner join sys.tables
on sys.partitions.object_id = sys.tables.object_id
and sys.tables.is_ms_shipped = 0
where a.database_id = db_id()
group by schema_name(sys.tables.schema_id), sys.tables.name
';
insert #temp exec(@sql);
fetch next from cur into @dbname
end
select
db_name
, schema_name
, table_name
, sum(memory_space_MB) memory_space_MB
, sum(storage_space_MB) storage_space_MB
, sum(percentage_of_object_in_memory) percentage_of_object_in_memory
from #temp
where memory_space_MB > 0
group by
db_name
, schema_name
, table_name
union all
select
'TOTAL'
, ''
, ''
, sum(memory_space_MB) memory_space_MB
, sum(storage_space_MB) storage_space_MB
, sum(percentage_of_object_in_memory) percentage_of_object_in_memory
from #temp
where memory_space_MB > 0
drop table #temp
close cur;
deallocate cur;