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?
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?
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.
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
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
Đâ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
Đ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? –
Troy - Điều này làm việc tuyệt vời !! Cảm ơn bạn! – Rogala