Soru SQL Azure tablo boyutu


Mssql2005'te, MB'lerde tablo boyutu almak istediğimde, EXEC sp_spaceused 'table' kullanıyorum.

Belirli bir tablonun SQL Azure'da bazı sorgu veya API kullanarak alan kullanması için herhangi bir yol var mı?


44
2017-12-24 06:39


Menşei




Cevaplar:


Ryan Dunn'dan 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

Birincisi, veritabanınızın boyutunu MB olarak verir ve ikincisi de aynı şeyi yapar, ancak veritabanınızdaki her nesne için en küçüğünden en küçüğe sıralar.


112
2018-03-09 15:32



Bu, SQL Server üzerinde sp_spaceUsed'den çok daha küçük bir boyut sağlar (ör., Yalnızca% 40 veya daha fazla). Bunun için bir sebep var mı? Bir ODBC bağlantısı kullanıyorsanız, arka ucunda Azure olduğunu nasıl anlayabilirsiniz? - Grahame Grieve
Troy - Bu harika çalıştı! Teşekkür ederim! - Rogala


İşte size tabloya, toplam boyut, satır başına satır sayısı ve satır başına bayt verecek bir sorgu:

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

Ve burada yukarıdaki ile aynı olan ancak indeksle bozan bir sorgu var:

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

6
2018-02-25 00:37





Bu şekilde üstte daha büyük olabilir:

 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

Kaynak


5
2017-10-22 14:42



Toplam (row_count) bir dizindeki her satır için 1 satır sayılacağından aldatıcıdır. - tster