SQL Server データベースのサイズを理解する

データベース管理の世界でよくある質問は、**「SQL Server 内のすべてのデータベースの総サイズをどのように確認できますか?」**です。これは、スペースとリソースを効果적으로管理する必要があるデータベース管理者にとって重要な作業です。データベースの成長を監視したり、容量計画を立てたり、ストレージの使用状況を把握したりする場合でも、SQL Server データベースのサイズを知ることは重要です。

SQL Server では、データベースの合計サイズと使用状況を示す簡単な方法が提供されています。以下では、SQL Server データベースによって占有されているスペースについての完全な洞察を得るためのストアドプロシージャを実装する手順について説明します。これは SQL Server 2008 までのバージョンに適用可能です。

解決策: ストアドプロシージャ

データベースのサイズを見つけるために、使用された合計スペース、利用可能なスペースを要約し、各データベースのデータとログファイルに関する重要な情報を提供するストアドプロシージャを作成します。手順を段階的に分けて説明します。

ステップ 1: ストアドプロシージャを設定する

データベースサイズを要約するために sp_SDS という名前のストアドプロシージャを作成する方法は次のとおりです。

USE master;
GO

IF OBJECT_ID('dbo.sp_SDS', 'P') IS NOT NULL
  DROP PROCEDURE dbo.sp_SDS;
GO

CREATE PROCEDURE dbo.sp_SDS 
  @TargetDatabase sysname = NULL,     --  NULL: すべてのデータベース
  @Level varchar(10) = 'Database',    -- オプション: "Database", "File"
  @UpdateUsage bit = 0,               -- デフォルト: 更新なし
  @Unit char(2) = 'MB'                -- 単位: メガバイト、キロバイト、ギガバイト
AS

ステップ 2: 初期設定

ストアドプロシージャ内で初期チェックを実行し、データベース情報を保持するための一時テーブルを作成します。

  • ターゲットデータベースのチェック: 特定のデータベースが要求されている場合は、それが存在することを確認します。
  • 一時テーブルの作成: 合計サイズ、使用スペース、空きスペースなど、データベース統計を格納するためのテーブルを作成します。

ステップ 3: データベース情報の収集

次に、SQL Server 内のデータベースに関する詳細を収集します。取得する主な要素は以下です。

  • データベース名
  • タイプ(データまたはログ)
  • 論理名
  • 総サイズ
  • 使用サイズおよび空きスペース

このデータを取得する方法は次のとおりです。

SELECT 
  @String = 'INSERT INTO dbo.##Tbl_CombinedInfo (DatabaseName, type, LogicalName, PhysicalName, T) '
  + 'SELECT DB_NAME(), {...} FROM sysfiles WHERE DB_NAME() = @DatabaseName';
EXEC (@String);

ステップ 4: サイズの計算

必要なデータを集めた後、使用されたスペースと空きスペースの割合を計算します。

  • 各ファイルのエクステントに基づいて使用スペースを更新します。
  • データおよびログファイルの使用スペースと空きスペースの割合を計算します。

ステップ 5: 結果の表示

最後に、計算された情報をユーザーに表示します。

SELECT DatabaseName AS 'Database',
  type AS 'Type',
  T AS 'Total',
  U AS 'Used',
  [U(%)] AS 'Used (%)',
  F AS 'Free',
  [F(%)] AS 'Free (%)',
  PhysicalName
FROM dbo.##Tbl_CombinedInfo 
WHERE DatabaseName LIKE ISNULL(@TargetDatabase, '%') 
ORDER BY DatabaseName ASC, type ASC;

実行の例

このストアドプロシージャを実行するには、次のように呼び出します。

EXEC dbo.sp_SDS;

特定のデータベースを対象にしたり、出力の単位を調整したりすることもできます。

EXEC dbo.sp_SDS 'your_database_name', 'Database', 1, 'GB';

結論

SQL Server データベースのサイズを知ることは、効果的な容量計画を支援するだけでなく、全体的なデータベース管理戦略を強化します。提供されたストアドプロシージャを実装することで、SQL Server データベースに関する洞察を効率的に収集し、最適なパフォーマンスとリソース配分を確保できます。

自分のニーズに合わせてスクリプトに加えた調整や体験を共有することを気軽にお勧めします!