Sql-Server

按表格顯示數據和磁碟使用細分

  • March 19, 2019

我有一個 SQL Server 2008 R2 數據庫被多個部署的程序使用。

問題:有沒有一種簡單的方法來顯示每個表佔用了多少空間,對於數據庫中的所有表,並區分邏輯空間和磁碟空間?

如果我使用 SSMS(Management Studio),則顯示的數據庫儲存屬性為 167 MB,其中 3 MB“可用”(大小合適,但我擔心可用的 3 MB - 這是需要關注的限制嗎? ,假設我知道我有足夠的磁碟空間?)

我可以鑽入每張桌子,但這需要很長時間。

我知道我可以編寫自己的查詢和測試,但我想知道是否已經有一種簡單的(內置的?)方法可以做到這一點。

在 SSMS 中,右鍵點擊數據庫並轉到“報告”、“標準報告”、“按表列出的磁碟使用情況”。它將告訴您每個表的總大小、數據大小、索引大小和未使用的大小(以及行數)。

堆棧溢出已回答:

SELECT 
   t.NAME AS TableName,
   s.Name AS SchemaName,
   p.rows AS RowCounts,
   SUM(a.total_pages) * 8 AS TotalSpaceKB, 
   SUM(a.used_pages) * 8 AS UsedSpaceKB, 
   (SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB
FROM 
   sys.tables t
INNER JOIN      
   sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN 
   sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN 
   sys.allocation_units a ON p.partition_id = a.container_id
LEFT OUTER JOIN 
   sys.schemas s ON t.schema_id = s.schema_id
WHERE 
   t.NAME NOT LIKE 'dt%' 
   AND t.is_ms_shipped = 0
   AND i.OBJECT_ID > 255 
GROUP BY 
   t.Name, s.Name, p.Rows
ORDER BY 
   t.Name

引用自:https://dba.stackexchange.com/questions/112167