テーブルごとのデータ容量を確認する方法
2016/9/30
文書番号:20575
SQL Server でテーブルごとにどれだけのデータ容量を使用しているかを確認する方法です。
【SQL Server Management Studio で確認する】
- SQL Server Management Studio でデータベースへ接続します。
調べたい対象のテーブルを右クリックして「プロパティ」をクリックします。
クリックで拡大
- 左ペインの分類から「ストレージ」を選択します。
「データ領域」の項目に現在使用しているデータ容量が表示されています。
データ行数やインデックスの領域も併せて確認することができます。
クリックで拡大
【SQL で確認する】
- ストアドプロシージャ「sp_MStablespace」を実行して確認することができます。
EXEC sp_MStablespace テーブル名
クリックで拡大
- どちらにしてもテーブルひとつずつ確認するのは面倒なので一覧で確認できるSQLを作ってみました。
--テーブル名を保持する変数 DECLARE @TAB_NAME varchar(50); --ストアドからの結果を一時的に保持するテーブル変数 declare @temp table ( [Rows] decimal(18,0) ,[DataSpaceUsed] decimal(18,0) ,[IndexSpaceUsed] decimal(18,0) ) --2回目以降の実行時はこれを有効にする --DROP TABLE #WORK --テーブル名付きで保持するワークテーブル CREATE TABLE #WORK( [TableName] varchar(50) ,[Rows] decimal(18,0) ,[DataSpaceUsed] decimal(18,0) ,[IndexSpaceUsed] decimal(18,0) ) --テーブルの一覧を取得するカーソルを定義 DECLARE CurTabList CURSOR LOCAL FOR SELECT name FROM sys.tables --カーソルオープン OPEN CurTabList; --最初の行データを取得 FETCH NEXT FROM CurTabList INTO @TAB_NAME; --データを取得できなくなるまでループ WHILE @@FETCH_STATUS = 0 BEGIN --一時テーブル変数をクリア DELETE @temp; --「sp_MStablespace」を実行してテーブル情報を取得 INSERT INTO @temp EXEC sp_MStablespace @TAB_NAME; --テーブル名を付加してWORKへデータ追加 INSERT INTO #WORK SELECT @TAB_NAME ,[Rows] ,[DataSpaceUsed] ,[IndexSpaceUsed] FROM @temp --次の行のデータを取得する FETCH NEXT FROM CurTabList INTO @TAB_NAME; END --カーソルを閉じる CLOSE CurTabList; DEALLOCATE CurTabList; --データを取得 SELECT * FROM #WORK ORDER BY TableName
クリックで拡大