2009-12-24 40 views
39

Trong mssql2005 khi tôi muốn nhận được kích thước bảng trong MB, tôi sử dụng bảng EXEC sp_spaceused '.Kích thước bảng SQL Azure

Có cách nào để lấy không gian được sử dụng bởi bảng cụ thể trong SQL Azure sử dụng một số truy vấn hoặc API không?

Trả lời

103

Từ 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 

Người đầu tiên sẽ cung cấp cho bạn kích thước của cơ sở dữ liệu của bạn trong MB và điều thứ hai sẽ làm như vậy, nhưng phá vỡ nó ra cho từng đối tượng trong cơ sở dữ liệu được sắp xếp theo lớn nhất đến nhỏ nhất.

+0

Điều này cung cấp kích thước nhỏ hơn đáng kể so với sp_spaceSử dụng trên SQL Server (ví dụ: chỉ có 40% hoặc hơn). Có một lý do cho điều này? Nếu bạn đang sử dụng một kết nối ODBC, làm thế nào bạn có thể nói rằng đó là Azure ở phía sau? –

+1

Troy - Điều này làm việc tuyệt vời !! Cảm ơn bạn! – Rogala

5

Bằng cách này bạn có thể có lớn hơn trên đầu trang:

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 

Source

+1

tổng (row_count) là lừa đảo vì nó sẽ tính 1 hàng cho mỗi hàng trong một chỉ mục. – tster

6

Đây là một truy vấn mà sẽ cung cấp cho bạn bởi bảng tổng kích thước, số lượng hàng và byte cho mỗi hàng:

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 

Và đây là truy vấn giống như truy vấn ở trên nhưng chia nhỏ truy vấn theo chỉ mục:

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 
Các vấn đề liên quan