2009-12-24 18 views
39

mssql2005 में जब मैं एमबी में तालिका का आकार प्राप्त करना चाहता हूं, तो मैं EXEC sp_spaceused 'table' का उपयोग करता हूं।एसक्यूएल एज़ूर टेबल आकार

क्या कुछ क्वेरी या एपीआई का उपयोग करके SQL Azure में विशेष तालिका द्वारा उपयोग की जाने वाली जगह प्राप्त करने का कोई तरीका है?

उत्तर

103

रयान डन से 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 

पहले एक आप एमबी में अपने डेटाबेस का आकार और दूसरा एक भी ऐसा ही होगा दे देंगे, लेकिन अपने डेटाबेस में प्रत्येक वस्तु के द्वारा आदेश दिया के लिए यह बाहर तोड़ सबसे छोटे से सबसे बड़ा।

+0

यह एसक्यूएल सर्वर पर sp_spaceUsed की तुलना में काफी छोटा आकार देता है (उदा। केवल 40% या तो)। क्या इसका कोई कारण है? यदि आप ओडीबीसी कनेक्शन का उपयोग कर रहे हैं, तो आप कैसे बता सकते हैं कि यह बैक एंड पर एज़ूर है? –

+1

ट्रॉय - यह बहुत अच्छा काम किया !! धन्यवाद! – Rogala

5

इस तरह से आप शीर्ष पर बड़ा हो सकता है:

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

योग (row_count) भ्रामक है क्योंकि यह सूचकांक में प्रत्येक पंक्ति के लिए 1 पंक्ति की गणना करेगा। – tster

6

यहाँ एक प्रश्न है जो आप तालिका द्वारा कुल आकार, पंक्तियों और पंक्ति प्रति बाइट की संख्या दे देंगे:

:
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 
संबंधित मुद्दे