SSMSなどのGUIツールを使用してデータベースを管理している場合は、GUIを介してクリックすることで、データベースのサイズを簡単に確認できます(データベースを右クリックし、[レポート]をポイントします 、次に標準レポート 次に、[ディスク使用量]をクリックします 。
ただし、T-SQLを使用してデータベースを管理する場合は、この情報を返すクエリを実行する必要があります。
この記事では、T-SQLを使用してSQLServerデータベースのサイズを確認する6つの方法を紹介します。
sp_spaceusedストアドプロシージャ
これは、現在のデータベースのテーブル、インデックス付きビュー、またはService Brokerキューによって使用されている行数、予約されているディスクスペース、およびディスクスペースを表示するか、データベース全体によって予約および使用されているディスクスペースを表示するシステムストアドプロシージャです。
使用するには、関連するデータベースに切り替えて手順を実行するだけです。このように:
USE WideWorldImporters; EXEC sp_spaceused;
結果:
database_name database_size unallocated space ------------------ ------------- ----------------- WideWorldImporters 3172.00 MB 2511.76 MB 1 row(s) returned reserved data index_size unused --------- --------- ---------- ------- 573688 KB 461728 KB 104120 KB 7840 KB 1 row(s) returned
これにより、関連情報を提供する2つの結果セットが返されます。
データベース内の特定のオブジェクトに関するデータを返すためのオブジェクト名を指定することもできます。この場合、1つの結果セットのみが返されます。
例:
USE WideWorldImporters; EXEC sp_spaceused N'Application.Cities';
結果:
name rows reserved data index_size unused ------ -------------------- -------- ------- ---------- ------ Cities 37940 4880 KB 3960 KB 896 KB 24 KB
この例では、Cities
に関する情報を返します。 テーブルのみ。
sp_helpdbストアドプロシージャ
別のシステムストアドプロシージャはsp_helpdb
です。 。
これを呼び出す例は次のとおりです。
EXEC sp_helpdb N'WideWorldImporters';
結果:
name fileid filename filegroup size maxsize growth usage ------------ ------ ---------------- --------- ---------- ------------- -------- --------- WWI_Primary 1 /data/WWI.mdf PRIMARY 1048576 KB Unlimited 65536 KB data only WWI_Log 2 /data/WWI.ldf null 102400 KB 2147483648 KB 65536 KB log only WWI_UserData 3 /data/WWI_UD.ndf USERDATA 2097152 KB Unlimited 65536 KB data only
この場合、データベースの名前を引数として渡します。 sp_helpdb
を呼び出すこともできます 引数を提供せずに。これを行うと、sys.databases
内のすべてのデータベースに関する情報が返されます。 カタログビュー。
sp_databasesストアドプロシージャ
さらに別のオプションは、sp_databases
です。 システムストアドプロシージャ。このストアドプロシージャには、SQL Serverのインスタンスに存在するデータベース、またはデータベースゲートウェイを介してアクセスできるデータベースが一覧表示されます。
実行方法は次のとおりです。
EXEC sp_databases;
結果:
DATABASE_NAME DATABASE_SIZE REMARKS ------------------ ------------- ------- master 6848 null model 16384 null msdb 15616 null Music 16384 null Nature 16384 null Solutions 47104 null tempdb 16384 null Test 16384 null WideWorldImporters 3248128 null world 16384 null WorldData 16384 null
sys.master_filesビュー
上記のストアドプロシージャは、sys.master_files
にクエリを実行します 見る。したがって、別の方法は、ビューに直接移動して、列を選択することです。
SELECT name, size, size * 8/1024 'Size (MB)', max_size FROM sys.master_files WHERE DB_NAME(database_id) = 'WideWorldImporters';
結果:
name size Size (MB) max_size ------------ ------ --------- --------- WWI_Primary 131072 1024 -1 WWI_Log 12800 100 268435456 WWI_UserData 262144 2048 -1
この場合、別々にリストされているため、各データファイルとログファイルのサイズを確認できます。また、size
で計算を実行していることにも気付くでしょう。 値をメガバイト(MB)に変換する列。
sys.database_filesビュー
sys.database_files
というシステムビューもあります 。このビューを使用して、前の例と同じ情報を返すことができます:
USE WideWorldImporters; SELECT name, size, size * 8/1024 'Size (MB)', max_size FROM sys.database_files;
結果:
name size Size (MB) max_size ------------ ------ --------- --------- WWI_Primary 131072 1024 -1 WWI_Log 12800 100 268435456 WWI_UserData 262144 2048 -1
ウィンドウ関数を使用する
前の2つの例の潜在的な問題の1つは、各ファイルのサイズが個別にリストされていることです。これは、達成したいことに応じて、プラスまたはマイナスと見なされる可能性があります。
また、このページの最初の3つの解決策は、すべてのファイルの合計を提供するだけであり、個々のファイルとそのサイズをリストしていないため、問題があると主張することもできます。
したがって、個々のファイルのサイズ、との両方を確認したい場合はどうでしょうか。 各データベースのすべてのファイルの合計?
OVER
を使用できます まさにそれを行うための条項。
次に例を示します:
SELECT d.name AS 'Database', m.name AS 'File', m.size, m.size * 8/1024 'Size (MB)', SUM(m.size * 8/1024) OVER (PARTITION BY d.name) AS 'Database Total', m.max_size FROM sys.master_files m INNER JOIN sys.databases d ON d.database_id = m.database_id;
結果:
Database File Size (MB) Database Total ------------------ --------------- --------- -------------- master master 4 6 master mastlog 2 6 model modeldev 8 16 model modellog 8 16 msdb MSDBData 14 14 msdb MSDBLog 0 14 Music Music 8 16 Music Music_log 8 16 Nature Nature 8 16 Nature Nature_log 8 16 Solutions Solutions 8 46 Solutions Solutions_log 8 46 Solutions Solutions_dat_2 10 46 Solutions Solutions_dat_3 10 46 Solutions Solutions_log_2 10 46 tempdb tempdev 8 16 tempdb templog 8 16 WideWorldImporters WWI_Primary 1024 3172 WideWorldImporters WWI_Log 100 3172 WideWorldImporters WWI_UserData 2048 3172 world world 8 16 world world_log 8 16
これにより、各データベース、各データベースのファイル、各ファイルのファイルサイズ、および各データベースのすべてのファイルの合計が一覧表示されます。これには、各データベース(およびそれらの合計サイズ)が複数回(ファイルごとに1回)リストされている必要があります。