🦭

SSMSでDBサイズ、Tableサイズを確認する

に公開

はじめに

SQL Serverにて、DBサイズ、およびTableサイズの確認方法をまとめました。

DBサイズ確認

実行クエリ

DBサイズは以下のクエリで確認することができます。

SELECT 
    s.name AS schema_name,
    SUM(a.total_pages) * 8 / 1024.0 AS size_MB
FROM 
    sys.tables t
JOIN 
    sys.schemas s ON t.schema_id = s.schema_id
JOIN 
    sys.indexes i ON t.object_id = i.object_id
JOIN 
    sys.partitions p ON i.object_id = p.object_id AND i.index_id = p.index_id
JOIN 
    sys.allocation_units a ON p.partition_id = a.container_id
GROUP BY 
    s.name
ORDER BY 
    size_MB DESC;
  • sys.tables:ユーザーテーブルの一覧
  • sys.schemas:スキーマ名の取得
  • total_pages * 8 / 1024.0:ページ数(1ページ = 8KB)をMBに変換
    ※GBに変換したい場合は、total_pages * 8 / 1024.0 / 1024.0

実行結果

DBが'dbo'という名前の場合、以下のような結果が返ってきます。

schema_name size_MB
1 dbo 432.1

Tableサイズ確認

実行クエリ

Tableサイズは以下のクエリで確認することができます。

SELECT 
    s.name AS schema_name,
    t.name AS table_name,
    SUM(p.rows) AS table_rows,
    SUM(a.total_pages) * 8 / 1024.0 AS all_mb,
    SUM(a.data_pages) * 8 / 1024.0 AS data_mb,
    (SUM(a.total_pages) - SUM(a.data_pages)) * 8 / 1024.0 AS index_mb
FROM 
    sys.tables t
JOIN 
    sys.schemas s ON t.schema_id = s.schema_id
JOIN 
    sys.indexes i ON t.object_id = i.object_id
JOIN 
    sys.partitions p ON i.object_id = p.object_id AND i.index_id = p.index_id
JOIN 
    sys.allocation_units a ON p.partition_id = a.container_id
GROUP BY 
    s.name, t.name
ORDER BY 
    all_mb DESC;
  • schema_name:テーブルが属するスキーマ名
  • table_name:テーブル名
  • table_rows:テーブルの行数(概算)
  • all_mb:データ+インデックスの合計サイズ(MB)
  • data_mb:データ部分のサイズ(MB)
  • index_mb:インデックス部分のサイズ(MB)
    ※こちらもGBに変換したい場合は、1024で割る

実行結果

'dbo'というDBに'JINJI'、'LOG'という名前のテーブルがある場合、以下のような結果が返ってきます。

schema_name table_name table_rows all_mb data_mb index_mb
1 dbo JINJI 1334 2.828125 0.296875 2.531250
2 dbo LOG 72843 679.875000 166.257812 513.617187

Discussion