搜尋本站文章

2008-05-27

查詢目前資料庫內,每一個資料表的磁碟空間使用資訊 -- Displaying disk space information about eyvery table



雖然我們可以使用 sp_spaceused 來顯示指定資料表及其索引的磁碟空間資訊。但是僅能對單一資料表來執行。
筆者這邊利用[動態管理檢視]來查詢目前資料庫內,每一個資料表的使用空間資訊,請參考以下的範例:

--查詢目前資料庫內,每一個資料表的使用空間資訊
SELECT a3.name AS N'結構描述',  a2.name AS N'資料表',  a1.rows AS N'資料列筆數',  (a1.reserved + ISNULL(a4.reserved,0))* 8.0/1024 AS N'配置的空間總量(MB)',  a1.data * 8.0/1024 AS '資料(MB)',  
(CASE WHEN (a1.used + ISNULL(a4.used,0)) > a1.data THEN (a1.used + ISNULL(a4.used,0)) - a1.data ELSE 0 END) * 8.0/1024 AS N'索引(MB)',  
(CASE WHEN (a1.reserved + ISNULL(a4.reserved,0)) > a1.used THEN (a1.reserved + ISNULL(a4.reserved,0)) - a1.used ELSE 0 END) * 8.0/1024 AS N'尚未使用(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 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'  
ORDER BY a3.name, a2.name


請參考下圖所示:

2008-05-12

檢視資料庫,其硬碟使用空間與資料實際使用空間;Displays the disk space reserved and used by the whole database


檢視資料庫,其硬碟使用空間與資料實際使用空間

先前使用 undocumented command:DBCC showfilestats 與 'DBCC SQLPERF(LOGSPACE) 等方式,取得資料庫的硬碟使用空間與資料實際使用空間之資訊。
筆者這邊再提供一個方式,利用目錄檢視:sys.database_files,也可以取得相關的磁碟空間的使用資訊。

這範例是包含:資料檔案與交易記錄檔案的空間使用資訊。

USE [目標資料庫]
GO
SELECT name N'邏輯名稱' , size/128.0 N'使用的磁碟空間(MB)' ,
CAST(FILEPROPERTY(name, 'SpaceUsed') AS int)/128.0 N'資料實際上使用的空間(MB)'
,size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS int)/128.0 N'剩餘的可用空間(MB)'
FROM sys.database_files;


請參考下圖所示:


參考資料:
檢視全部的資料庫,其交易記錄檔案所使用的空間資訊; Transaction log space usage statistics for all databases
http://sharedderrick.blogspot.com/2008/01/transaction-log-space-usage-statistics.html

顯示資料庫所使用的磁碟空間、資料實際所使用的空間; Displays the disk space reserved and used by the whole database
http://sharedderrick.blogspot.com/2008/01/displays-disk-space-reserved-and-used.html

顯示每一個資料庫的所使用的磁碟空間之完整版本; Displays the disk space reserved and used by the each database
http://sharedderrick.blogspot.com/2008/01/displays-disk-space-reserved-and-used_02.html