🦭
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