2013-02-04 28 views
5

Tôi thích sử dụng báo cáo SQL Management Studio 'Disk Usage by Top Tables' để xem những gì đang chiếm không gian trong cơ sở dữ liệu của tôi. Tôi có thể sử dụng những gì truy vấn tương đương trong SQL Azure để xemTruy vấn để tạo báo cáo Sử dụng đĩa theo báo cáo trên cùng trong SQL Azure?

  • số hàng mỗi bảng
  • sử dụng
  • đĩa cho mỗi bảng (tốt hơn là phá vỡ ra dữ liệu và chỉ số)

Trong SQL Profiler Tôi có thể thấy rằng các Sử dụng ổ đĩa bằng cách báo cáo Bàn Lên trên thường chạy này:

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 

nhưng thất bại khi chạy chống SQL Azure với thông điệp

Msg 208, Level 16, State 1, Line 4 
Invalid object name 'sys.internal_tables'. 
+1

Câu hỏi của bạn được trả lời trong [tài liệu] (http://msdn.microsoft.com/en-us/library/windowsazure/ff394114.aspx) cho SQL Azure và nó cũng [tài liệu] (http: // msdn.microsoft.com/en-us/library/windowsazure/ee336238.aspx) thực tế là 'sys.internal_tables' không được hỗ trợ trong Azure – Pondlife

Trả lời

3

thử truy vấn sys.dm_db_partition_stats

ví dụ

- Tính kích thước của các đối tượng cơ sở dữ liệu cá nhân.

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

Thử nghiệm trên Azure SQL v12, hoạt động tốt. – angularsen

9

EDIT 24 tháng năm năm 2016: Không có vẻ để làm việc những ngày này ... tôi sẽ phải làm lại này

Vâng, tôi đoán vì nó sys.internal_tables đó là vấn đề điều đơn giản nhất là loại bỏ nó khỏi hỗn hợp. Một sự điều chỉnh nhẹ và chúng tôi đang trái với điều này:

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   

Có một số thú vị management views and functions cung cấp bởi Azure nhưng không cần thiết trong trường hợp này ... Tôi nghĩ.

Các vấn đề liên quan