HOME >> Tips >> Microsoft SQL Server

テーブルごとのデータ容量を確認する方法

2016/9/30
文書番号:20575

SQL Server でテーブルごとにどれだけのデータ容量を使用しているかを確認する方法です。

【SQL Server Management Studio で確認する】

  1. SQL Server Management Studio でデータベースへ接続します。
    調べたい対象のテーブルを右クリックして「プロパティ」をクリックします。

    クリックで拡大
  2. 左ペインの分類から「ストレージ」を選択します。
    「データ領域」の項目に現在使用しているデータ容量が表示されています。
    データ行数やインデックスの領域も併せて確認することができます。

    クリックで拡大

【SQL で確認する】

  1. ストアドプロシージャ「sp_MStablespace」を実行して確認することができます。
    
    EXEC sp_MStablespace テーブル名
    

    クリックで拡大


  2. どちらにしてもテーブルひとつずつ確認するのは面倒なので一覧で確認できる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
    

    クリックで拡大