2013-02-04 33 views
5

मुझे अपने डेटाबेस में स्थान ले रहा है यह देखने के लिए SQL प्रबंधन स्टूडियो रिपोर्ट 'शीर्ष उपयोग द्वारा डिस्क उपयोग' का उपयोग करना पसंद है। क्या बराबर क्वेरी मैं एसक्यूएल Azure में उपयोग तालिका के अनुसार पंक्तियों तालिका के अनुसार SQL Azure में शीर्ष टेबल्स रिपोर्ट द्वारा डिस्क उपयोग उत्पन्न करने के लिए क्वेरीज़?

  • डिस्क उपयोग
  • (अधिमानतः डेटा और सूचकांक को तोड़ते) एसक्यूएल प्रोफाइलर में की

    • संख्या को देखने के लिए कर सकते हैं मैं देख सकता हूँ कि शीर्ष टेबल्स रिपोर्ट से डिस्क उपयोग आम तौर पर इस चलाता है:

      begin try 
      
          SELECT TOP 1000 
           (row_number() over(order by (a1.reserved + ISNULL(a4.reserved,0)) desc))%2 as l1, 
           a3.name AS [schemaname], 
           a2.name AS [tablename], 
           a1.rows as row_count, 
           (a1.reserved + ISNULL(a4.reserved,0))* 8 AS reserved, 
           a1.data * 8 AS data, 
           (CASE WHEN (a1.used + ISNULL(a4.used,0)) > a1.data THEN (a1.used + ISNULL(a4.used,0)) - a1.data ELSE 0 END) * 8 AS index_size, 
           (CASE WHEN (a1.reserved + ISNULL(a4.reserved,0)) > a1.used THEN (a1.reserved + ISNULL(a4.reserved,0)) - a1.used ELSE 0 END) * 8 AS unused 
      
          FROM ( SELECT 
             ps.object_id, 
             SUM (CASE WHEN (ps.index_id < 2) THEN row_count ELSE 0 END) AS [rows], 
             SUM (ps.reserved_page_count) AS reserved, 
             SUM (CASE WHEN (ps.index_id < 2) THEN (ps.in_row_data_page_count + ps.lob_used_page_count + ps.row_overflow_used_page_count) 
                ELSE (ps.lob_used_page_count + ps.row_overflow_used_page_count) END 
              ) AS data, 
             SUM (ps.used_page_count) AS used 
             FROM sys.dm_db_partition_stats ps 
             GROUP BY ps.object_id 
            ) AS a1 
      
          LEFT OUTER JOIN ( SELECT 
               it.parent_id, 
               SUM(ps.reserved_page_count) AS reserved, 
               SUM(ps.used_page_count) AS used 
               FROM sys.dm_db_partition_stats ps 
               INNER JOIN sys.internal_tables it ON (it.object_id = ps.object_id) 
               WHERE it.internal_type IN (202,204) 
               GROUP BY it.parent_id 
              ) AS a4 ON (a4.parent_id = a1.object_id) 
      
          INNER JOIN sys.all_objects a2 ON (a1.object_id = a2.object_id) 
      
          INNER JOIN sys.schemas a3 ON (a2.schema_id = a3.schema_id) 
      
          WHERE a2.type <> N'S' and a2.type <> N'IT' 
      
      end try 
      begin catch 
          select 
          -100 as l1 
          , 1 as schemaname 
          ,  ERROR_NUMBER() as tablename 
          ,  ERROR_SEVERITY() as row_count 
          ,  ERROR_STATE() as reserved 
          ,  ERROR_MESSAGE() as data 
          ,  1 as index_size 
          ,  1 as unused 
      end catch 
      

      लेकिन वह विफल रहता है जब संदेश

      साथ एसक्यूएल Azure के खिलाफ चल रहा
      Msg 208, Level 16, State 1, Line 4 
      Invalid object name 'sys.internal_tables'. 
      
    +1

    एसक्यूएल एज़ूर के लिए आपके प्रश्न का उत्तर [दस्तावेज़ीकरण] (http://msdn.microsoft.com/en-us/library/windowsazure/ff394114.aspx) में दिया गया है, और यह भी [दस्तावेज़] (http: // msdn.microsoft.com/en-us/library/windowsazure/ee336238.aspx) तथ्य यह है कि 'sys.internal_tables' Azure – Pondlife

    उत्तर

    3

    क्वेरी करने की कोशिश sys.dm_db_partition_stats

    जैसे

    - अलग-अलग डाटाबेस वस्तुओं के आकार की गणना करता है।

    SELECT sys.objects.name, SUM(reserved_page_count) * 8.0/1024 as Size 
    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 Size DESC; 
    GO 
    
    +0

    में समर्थित नहीं है Azure SQL v12 पर परीक्षण किया गया है, अच्छी तरह से काम करता है। – angularsen

    9

    संपादन 24 मई 2016: इन दिनों काम करने के लिए प्रतीत नहीं होता है ... मैं इस

    rework करने के लिए अच्छी तरह से मुझे लगता है कि क्योंकि यह sys.internal_tables है कि समस्या का सबसे सरल बात करने के लिए है है होगा मिश्रण से इसे हटा दें। एक मामूली समायोजन और हम इस के साथ छोड़ दिया जाता है:

    SELECT TOP 1000 
         a3.name AS SchemaName, 
         a2.name AS TableName, 
         a1.rows as Row_Count, 
         (a1.reserved)* 8.0/1024 AS reserved_mb, 
         a1.data * 8.0/1024 AS data_mb, 
         (CASE WHEN (a1.used) > a1.data THEN (a1.used) - a1.data ELSE 0 END) * 8.0/1024 AS index_size_mb, 
         (CASE WHEN (a1.reserved) > a1.used THEN (a1.reserved) - a1.used ELSE 0 END) * 8.0/1024 AS unused_mb 
    
        FROM ( SELECT 
           ps.object_id, 
           SUM (CASE WHEN (ps.index_id < 2) THEN row_count ELSE 0 END) AS [rows], 
           SUM (ps.reserved_page_count) AS reserved, 
           SUM (CASE WHEN (ps.index_id < 2) THEN (ps.in_row_data_page_count + ps.lob_used_page_count + ps.row_overflow_used_page_count) 
              ELSE (ps.lob_used_page_count + ps.row_overflow_used_page_count) END 
            ) AS data, 
           SUM (ps.used_page_count) AS used 
           FROM sys.dm_db_partition_stats ps 
           GROUP BY ps.object_id 
          ) AS a1 
    
        INNER JOIN sys.all_objects a2 ON (a1.object_id = a2.object_id) 
    
        INNER JOIN sys.schemas a3 ON (a2.schema_id = a3.schema_id) 
    
        WHERE a2.type <> N'S' and a2.type <> N'IT' 
        order by a1.data desc   
    

    कुछ रोचक management views and functions Azure द्वारा प्रदान की लेकिन इस मामले में आवश्यक नहीं कर रहे हैं ... मुझे लगता है।