システム ビュー、管理ビュー、PowerShell、WMI を使用して SQL Server 2008 でデータベース サイズをクエリする方法
SQL Server 2008 で実行しているすべてのデータベースのサイズをすばやく簡単に確認する方法を知りたいですか?
このチュートリアルでは、システム ビューを使用してすべてのデータベース サイズをクエリする方法について説明します。
この方法は、すべてのデータベースの合計サイズだけでなく、個々のデータベース サイズも確認するのに役立ちます。
要件
このチュートリアルを実行するには、次のものが必要です。
- SQL Server 2008 がインストールされているコンピューター
- SQL Server 管理者権限を持つユーザー アカウント
手順
- SQL Server Management Studio を開きます。
- 接続するサーバー インスタンスを選択します。
- オブジェクト エクスプローラーで、サーバーノードを展開します。
- データベースノードを展開します。
- 右クリックして 新しいクエリを選択します。
- 以下のクエリをクエリ エディターに貼り付けます。
SELECT
name AS DatabaseName,
CAST(size * 8 / 1024 AS DECIMAL(10,2)) AS SizeInMB
FROM sys.databases
ORDER BY SizeInMB DESC;
- 実行ボタンをクリックします。
結果
クエリの実行が完了すると、すべてのデータベースの名前とサイズが結果セットに表示されます。 サイズはメガバイト (MB) で表示されます。
説明
このクエリは、sys.databases
システム ビューを使用します。 このビューには、すべてのユーザー データベースに関する情報が含まれています。
クエリは次のことを行います。
name
列からデータベースの名前を取得します。size
列からデータベースのサイズ (バイト単位) を取得します。CAST
関数を使用して、サイズをメガバイトに変換します。ORDER BY
句を使用して、結果を降順にサイズでソートします。
ヒント
- 特定のデータベースのサイズのみを確認したい場合は、
WHERE
句を使用してクエリをフィルタリングできます。 たとえば、次のクエリは、AdventureWorks
データベースのサイズのみを取得します。
SELECT
name AS DatabaseName,
CAST(size * 8 / 1024 AS DECIMAL(10,2)) AS SizeInMB
FROM sys.databases
WHERE name = 'AdventureWorks'
ORDER BY SizeInMB DESC;
- データベースのサイズを GB (ギガバイト) で表示するには、
CAST
関数で次のような式を使用できます。
CAST(size * 8 / 1048576 AS DECIMAL(10,2)) AS SizeInGB
SQL Server 2008 ですべてのデータベース サイズを取得するサンプル コード
SELECT
name AS DatabaseName,
CAST(size * 8 / 1024 AS DECIMAL(10,2)) AS SizeInMB
FROM sys.databases
ORDER BY SizeInMB DESC;
このコードの説明:
SELECT
句は、クエリで取得する列を指定します。 この場合、name
列とSizeInMB
列が選択されます。SizeInMB
列は、データベースのサイズをメガバイト (MB) で格納します。
ORDER BY
句は、結果セットをソートする方法を指定します。 この場合、結果セットはSizeInMB
列で降順にソートされます。つまり、最大のデータベースが最初に表示されます。CAST
関数は、値をあるデータ型から別のデータ型に変換するために使用されます。 この場合、size
列の値はバイト単位からメガバイト単位に変換されます。
スクリプトの実行方法:
- 新しいクエリ ウィンドウを開きます。
- 上記の T-SQL スクリプトをクエリ ウィンドウに貼り付けます。
SELECT
name AS DatabaseName,
CAST(size * 8 / 1024 AS DECIMAL(10,2)) AS SizeInMB
FROM sys.databases
WHERE name = 'AdventureWorks'
ORDER BY SizeInMB DESC;
CAST(size * 8 / 1048576 AS DECIMAL(10,2)) AS SizeInGB
SQL Server 2008 ですべてのデータベース サイズを取得するその他の方法
管理ビューを使用する
SQL Server 2008 には、sys.dm_db_partition_stats
管理ビューが含まれています。 このビューには、各データベースのパーティションに関する情報が含まれています。 この情報を使用して、各データベースの合計サイズを計算できます。
以下のクエリは、sys.dm_db_partition_stats
ビューを使用してすべてのデータベースの合計サイズを取得する方法を示しています。
SELECT
db_name(),
SUM(CAST(reserved_page_count * 8 / 1024 AS DECIMAL(10,2))) AS SizeInMB
FROM sys.dm_db_partition_stats
GROUP BY db_name()
ORDER BY SizeInMB DESC;
PowerShell を使用して、SQL Server 管理 cmdlets を実行し、データベース サイズを取得することもできます。
以下の PowerShell コマンドは、すべてのデータベースのサイズを取得する方法を示しています。
Get-ChildItem -Path SQLSERVER:\*\Databases |
ForEach-Object {
$size = (Get-ChildItem -Path $_.Path -Recurse -Force |
Measure-Object -Property @{Name = 'Size';Expression =$_.ContentLength} |
Select-Object -ExpandProperty Size).Sum() / 1024MB
Write-Output "Database: $($_.Name); Size: $($size:N2) MB"
}
WMI を使用する
WMI (Windows Management Instrumentation) を使用して、SQL Server インスタンスに関する情報を取得し、データベース サイズを計算することもできます。
SELECT Name, Size FROM Win32_PerfRawData_SQLServerDatabase WHERE ComputerName = '<servername>'
SQL Server 2008 ですべてのデータベース サイズを取得するには、さまざまな方法があります。 上記の方法はすべて有効ですが、ニーズに合った方法を選択することが重要です。
- システム ビューを使用する方法は、最もシンプルで使いやすい方法です。
- 管理ビューを使用する方法は、より詳細な情報を提供できます。
- PowerShell を使用する方法は、スクリプト化に適しています。
- WMI を使用する方法は、リモート コンピューターのデータベース サイズを取得する場合に役立ちます。
どの方法を選択する場合でも、データベースのサイズを定期的に監視して、ストレージ スペースの使用状況を把握することが重要です。 これにより、必要な場合はデータベースを縮小したり、新しいストレージを追加したりすることができます。
sql sql-server t-sql