2013-02-04 18 views
5

私は、SQL Management Studioのレポート「トップテーブルによるディスク使用量」を使用して、自分のデータベース内の容量を調べるのが好きです。同等のどのようなクエリ私はSQLプロファイラで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 

が、メッセージ

とSQL Azureのに対して実行するときにそれが失敗:トップテーブルによってディスク使用量は、通常、これを実行します報告します3210
Msg 208, Level 16, State 1, Line 4 
Invalid object name 'sys.internal_tables'. 
+1

あなたの質問はSQL Azureの[documentation](http://msdn.microsoft.com/en-us/library/windowsazure/ff394114.aspx)と[documents](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

EDIT 2016年5月24日:それは最も簡単な事はしている問題だ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があるが、この場合には必要ありません...私は思います。

関連する問題