LoginSignup
0
0

SQL Server ファイルグループについて

Posted at

Microsoft SQL Serverを運用している環境において、複数のファイルグループの使用率を求めるSQLクエリ文を必要としています。このようなSQLクエリ文をいくつか提案してください。

Microsoft SQL Serverを運用している環境において、複数のファイルグループの使用率を求めるためのいくつかのSQLクエリを以下に提案します。

各ファイルグループの使用率をパーセンテージで表示するクエリ:
SELECT
    fg.name AS [FileGroup],
    df.name AS [File],
    df.physical_name AS [FilePath],
    df.size / 128.0 AS [FileSize_MB],
    df.size / 128.0 - df.fileproperty('SpaceUsed') / 128.0 AS [AvailableSpace_MB],
    (df.size / 128.0 - df.fileproperty('SpaceUsed') / 128.0) / (df.size / 128.0) * 100 AS [UsagePercentage]
FROM sys.filegroups fg
JOIN sys.master_files df ON fg.data_space_id = df.data_space_id
ORDER BY fg.name;

このクエリでは、sys.filegroupsとsys.master_filesシステムビューを結合し、各ファイルグループの名前、ファイル名、ファイルパス、ファイルサイズ、使用可能な空きスペース、使用率をパーセンテージで表示します。

各ファイルグループの使用率を棒グラフで表示するクエリ:
SELECT
    fg.name AS [FileGroup],
    CAST(df.size / 128.0 - df.fileproperty('SpaceUsed') / 128.0 AS FLOAT) / (df.size / 128.0) * 100 AS [UsagePercentage]
FROM sys.filegroups fg
JOIN sys.master_files df ON fg.data_space_id = df.data_space_id
ORDER BY fg.name;

このクエリでは、各ファイルグループの名前と使用率をパーセンテージで取得します。取得したデータをグラフ化するアプリケーションで棒グラフにして可視化することができます。

データベースごとにファイルグループの使用率を合計して表示するクエリ:
SELECT
    DB_NAME() AS [DatabaseName],
    fg.name AS [FileGroup],
    SUM(df.size / 128.0 - df.fileproperty('SpaceUsed') / 128.0) / SUM(df.size / 128.0) * 100 AS [UsagePercentage]
FROM sys.filegroups fg
JOIN sys.master_files df ON fg.data_space_id = df.data_space_id
GROUP BY DB_NAME(), fg.name
ORDER BY DB_NAME(), fg.name;

このクエリでは、データベースごとにファイルグループの使用率を合計して表示します。DB_NAME()関数を使って現在のデータベース名を取得し、グループ化して使用率を計算しています。

これらのクエリを使用することで、Microsoft SQL Server環境で複数のファイルグループの使用率を把握できます。

それぞれのクエリの中に「128.0」という数字が散見されますが、これはどのような意味を持つ数字なのですか?

「128.0」という数字は、SQL Serverのデータベースファイルのサイズを128KB単位で表すための値です。SQL Serverは、データベースファイルのサイズを8ページ(1ページは8KB)ごとに増減することができます。したがって、データベースファイルのサイズを128KB単位で表すことで、管理や計算が容易になります。

以下は、その理由について詳しく説明します:

  • データベースファイルサイズの表現
    SQL Serverは、データベースファイルのサイズを8KBの倍数で管理します。これをページ(Page)と呼ばれる単位で表します。128KBは、16ページ分(128KB / 8KB = 16)に相当します。

  • パフォーマンスの観点
    SQL Serverの内部動作やディスクI/Oの最適化を考慮すると、8KBの倍数でファイルを拡張・縮小することが効率的です。また、データベースファイルが多数のページで構成される場合、管理が容易になります。

  • システムビューの値
    「sys.master_files」システムビューなど、SQL Serverの一部のシステムビューはデータベースファイルのサイズを「ページ数」で返します。そのため、サイズを128KB単位に変換する必要があります。
    例えば、「df.size」がシステムビューから取得したファイルサイズをページ数で表した値であるため、128KB単位に変換するために「/ 128.0」という計算が含まれています。

つまり、「128.0」という数字は、データベースファイルサイズを128KB単位で表すための変換係数として使用されているのです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0