在 mssql2005 中,当我想以 MB 为单位获取表的大小时,我使用 EXEC sp_spaceused 'table'。
有没有办法使用一些查询或 API 来获取 SQL Azure 中特定表使用的空间?
在 mssql2005 中,当我想以 MB 为单位获取表的大小时,我使用 EXEC sp_spaceused 'table'。
有没有办法使用一些查询或 API 来获取 SQL Azure 中特定表使用的空间?
来自 Ryan Dunn http://dunnry.com/blog/CalculatingTheSizeOfYourSQLAzureDatabase.aspx
select
sum(reserved_page_count) * 8.0 / 1024 [SizeInMB]
from
sys.dm_db_partition_stats
GO
select
sys.objects.name, sum(reserved_page_count) * 8.0 / 1024 [SizeInMB]
from
sys.dm_db_partition_stats, sys.objects
where
sys.dm_db_partition_stats.object_id = sys.objects.object_id
group by sys.objects.name
order by sum(reserved_page_count) DESC
第一个将为您提供以 MB 为单位的数据库大小,第二个将执行相同的操作,但将数据库中的每个对象按从大到小排序。
这是一个查询,它将通过表格为您提供总大小、行数和每行字节数:
select
o.name,
max(s.row_count) AS 'Rows',
sum(s.reserved_page_count) * 8.0 / (1024 * 1024) as 'GB',
(8 * 1024 * sum(s.reserved_page_count)) / (max(s.row_count)) as 'Bytes/Row'
from sys.dm_db_partition_stats s, sys.objects o
where o.object_id = s.object_id
group by o.name
having max(s.row_count) > 0
order by GB desc
这是一个与上面相同但按索引分解的查询:
select
o.Name,
i.Name,
max(s.row_count) AS 'Rows',
sum(s.reserved_page_count) * 8.0 / (1024 * 1024) as 'GB',
(8 * 1024* sum(s.reserved_page_count)) / max(s.row_count) as 'Bytes/Row'
from
sys.dm_db_partition_stats s,
sys.indexes i,
sys.objects o
where
s.object_id = i.object_id
and s.index_id = i.index_id
and s.index_id >0
and i.object_id = o.object_id
group by i.Name, o.Name
having SUM(s.row_count) > 0
order by GB desc
这样你就可以把更大的放在上面:
SELECT sys.objects.name,
SUM(row_count) AS 'Row Count',
SUM(reserved_page_count) * 8.0 / 1024 AS 'Table Size (MB)'
FROM sys.dm_db_partition_stats, sys.objects
WHERE sys.dm_db_partition_stats.object_id = sys.objects.object_id
GROUP BY sys.objects.name
ORDER BY [Table Size (MB)] DESC