# 画面設計書 1-sp_Blitz 結果画面

## 概要

本ドキュメントは、SQL Server First Responder Kitのsp_Blitzストアドプロシージャが出力するサーバー全体のヘルスチェック結果画面の設計仕様を記載する。

### 本画面の処理概要

sp_Blitz結果画面は、SQL Serverインスタンス全体の健康状態を診断し、発見された問題を優先度順にリスト表示する画面である。DBAがサーバーの問題を迅速に把握し、対処すべき項目を優先順位付けして確認できる。

**業務上の目的・背景**：SQL Serverの運用において、サーバーの健康状態を定期的にチェックし、潜在的な問題を早期に発見することは重要である。sp_Blitzは、セキュリティ、パフォーマンス、構成、バックアップなど多岐にわたるチェック項目を自動的に診断し、優先度付きのレポートとして出力することで、DBAの作業効率を向上させる。緊急度の高い問題から順に表示されるため、限られた時間内で最も重要な問題に集中できる。

**画面へのアクセス方法**：SQL Server Management Studio (SSMS)またはAzure Data Studioなどのクエリツールから、`EXEC sp_Blitz`を実行することで結果画面にアクセスする。パラメータを指定することで、出力形式や診断範囲をカスタマイズできる。

**主要な操作・処理内容**：
1. サーバー全体のヘルスチェックを実行し、200以上のチェック項目を診断
2. 発見された問題をPriority（優先度）順にソートして表示
3. 各問題に対してFindingsGroup（カテゴリ）、Finding（問題名）、Details（詳細）、URL（参照リンク）を提供
4. @OutputTypeパラメータでTABLE/MARKDOWN/XML/COUNT/SCHEMA/NONE形式の出力を選択可能
5. @IgnorePrioritiesBelow/@IgnorePrioritiesAboveで表示する優先度範囲をフィルタリング

**画面遷移**：
- この画面から遷移できる画面：sp_BlitzCache結果画面（パフォーマンス問題検出時）、sp_BlitzIndex診断結果画面（インデックス警告時）、sp_BlitzBackups結果画面（バックアップ問題検出時）
- この画面に遷移してくる画面：エントリーポイント（定期ヘルスチェック時）

**権限による表示制御**：sysadmin権限がない場合、一部のチェック（DBCC CHECKDB日付確認、トレースファイル確認、xp_fixeddrivesなど）がスキップされ、「Some Checks Skipped」という情報メッセージが表示される。VIEW SERVER STATE権限は必須であり、この権限がない場合はプロシージャが実行されない。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 1 | sp_Blitz | 主機能 | サーバー全体のヘルスチェックを実行し、Priority/FindingsGroup/Findings等の結果を表示 |

## 画面種別

一覧（診断結果リスト表示）

## URL/ルーティング

```sql
-- 基本実行
EXEC sp_Blitz;

-- パラメータ指定実行
EXEC sp_Blitz
    @CheckUserDatabaseObjects = 1,
    @CheckServerInfo = 1,
    @OutputType = 'TABLE';
```

## 入出力項目

### 入力パラメータ

| パラメータ名 | データ型 | デフォルト値 | 説明 |
|-------------|---------|-------------|------|
| @Help | TINYINT | 0 | 1を指定するとヘルプメッセージを表示 |
| @CheckUserDatabaseObjects | TINYINT | 1 | ユーザーデータベースオブジェクト（トリガー、ヒープ等）をチェック |
| @CheckProcedureCache | TINYINT | 0 | プロシージャキャッシュをチェック |
| @OutputType | VARCHAR(20) | 'TABLE' | 出力形式（TABLE/MARKDOWN/COUNT/SCHEMA/XML/NONE） |
| @CheckServerInfo | TINYINT | 0 | サーバー情報（CPU、メモリ、仮想化）を表示 |
| @SkipChecksServer | NVARCHAR(256) | NULL | スキップチェックテーブルのサーバー名 |
| @SkipChecksDatabase | NVARCHAR(256) | NULL | スキップチェックテーブルのデータベース名 |
| @SkipChecksSchema | NVARCHAR(256) | NULL | スキップチェックテーブルのスキーマ名 |
| @SkipChecksTable | NVARCHAR(256) | NULL | スキップチェックテーブルのテーブル名 |
| @IgnorePrioritiesBelow | INT | NULL | 指定値未満の優先度をスキップ |
| @IgnorePrioritiesAbove | INT | NULL | 指定値超過の優先度をスキップ |
| @OutputServerName | NVARCHAR(256) | NULL | 出力先サーバー名 |
| @OutputDatabaseName | NVARCHAR(256) | NULL | 出力先データベース名 |
| @OutputSchemaName | NVARCHAR(256) | NULL | 出力先スキーマ名 |
| @OutputTableName | NVARCHAR(256) | NULL | 出力先テーブル名 |
| @SummaryMode | TINYINT | 0 | サマリーモード |
| @BringThePain | TINYINT | 0 | 大量データ処理許可フラグ |
| @Debug | TINYINT | 0 | デバッグモード（0:無効/1:メッセージ出力/2:動的SQL出力） |

## 表示項目

### 結果セット（@OutputType = 'TABLE'の場合）

| 列名 | データ型 | 説明 |
|-----|---------|------|
| Priority | TINYINT | 優先度（1が最も緊急、値が大きいほど優先度低） |
| FindingsGroup | VARCHAR(50) | 問題のカテゴリ（Security, Performance, Reliability等） |
| Finding | VARCHAR(200) | 問題の名称 |
| DatabaseName | NVARCHAR(128) | 関連するデータベース名（該当する場合） |
| URL | VARCHAR(200) | 問題の詳細情報へのリンク |
| Details | NVARCHAR(4000) | 問題の詳細説明 |
| QueryPlan | XML | 関連するクエリプラン（該当する場合） |
| QueryPlanFiltered | NVARCHAR(MAX) | フィルタリングされたクエリプラン |
| CheckID | INT | チェック項目の識別番号 |

### 優先度レベルの意味

| Priority | 意味 | 対応の緊急度 |
|----------|------|-------------|
| 0 | 情報のみ | 対応不要 |
| 1 | 緊急 | 即座に対応が必要 |
| 10-50 | 高優先度 | 早期に対応すべき |
| 50-100 | 中優先度 | 計画的に対応 |
| 100以上 | 低優先度 | 時間があれば対応 |

## イベント仕様

### 1-プロシージャ実行

ユーザーがsp_Blitzを実行すると、以下の処理フローが実行される：

1. パラメータの検証とデフォルト値の設定
2. 権限チェック（VIEW SERVER STATE権限の確認）
3. スキップチェックテーブルの読み込み（指定されている場合）
4. 環境検出（Amazon RDS、Azure Managed Instance、Express Edition等）
5. 各種チェックの実行（200以上のチェック項目）
6. #BlitzResults一時テーブルへの結果格納
7. 指定された出力形式での結果返却

### 2-出力形式選択

| @OutputType | 動作 |
|------------|------|
| TABLE | 結果セットをテーブル形式で返却 |
| MARKDOWN | マークダウン形式のテキストとして返却 |
| COUNT | 検出された問題の件数のみ返却 |
| SCHEMA | 結果セットのスキーマ情報を返却 |
| XML | XML形式で結果を返却 |
| NONE | 結果を返却せず、出力テーブルにのみ保存 |

## データベース更新仕様

### 操作別データベース影響一覧

| 操作（イベント） | 対象テーブル | 操作種別 | 概要 |
|----------------|-------------|---------|------|
| プロシージャ実行 | #BlitzResults | INSERT | 診断結果を一時テーブルに格納 |
| プロシージャ実行 | #SkipChecks | INSERT | スキップするチェック項目を格納 |
| 出力テーブル指定時 | @OutputTableName | INSERT | 結果を永続テーブルに保存 |

### テーブル別更新項目詳細

#### #BlitzResults（一時テーブル）

| 操作 | 項目（カラム名） | 更新値・取得条件 | 備考 |
|-----|-----------------|-----------------|------|
| INSERT | CheckID | 各チェック項目固有のID | 1-2301等の固定値 |
| INSERT | Priority | 問題の優先度 | 0-254の範囲 |
| INSERT | FindingsGroup | 問題カテゴリ | Security, Performance等 |
| INSERT | Finding | 問題名 | 各チェック固有の文言 |
| INSERT | DatabaseName | 該当データベース | NULLの場合もあり |
| INSERT | URL | 参照URL | FirstResponderKit.org等 |
| INSERT | Details | 詳細情報 | 動的に生成 |
| INSERT | QueryPlan | 実行プラン | NULL許容 |

## メッセージ仕様

| メッセージID | 種別 | メッセージ内容 | 発生条件 |
|-------------|------|---------------|---------|
| - | エラー | The user {username} does not have VIEW SERVER STATE permissions. | VIEW SERVER STATE権限がない場合 |
| 223 | 情報 | Some Checks Skipped | sysadmin権限がない場合、または特定環境（RDS等）の場合 |
| 204 | 情報 | @CheckUserDatabaseObjects Disabled | compatibility_level < 90のDBが存在する場合 |

## 例外処理

| 例外状況 | 動作 |
|---------|------|
| VIEW SERVER STATE権限なし | エラーメッセージを表示してプロシージャ終了 |
| オフラインデータベースあり | 初回実行時に失敗する可能性あり、2回目は成功 |
| compatibility_level < 90のDBあり | @CheckUserDatabaseObjects自動無効化 |
| Express Edition | SQL Agent関連チェックをスキップ |
| Amazon RDS | RDS非対応チェックをスキップ |
| Azure Managed Instance | MI非対応チェックをスキップ |

## 備考

- バージョン: 8.29（2026年2月3日）
- ライセンス: MIT License
- 公式サイト: http://FirstResponderKit.org
- 既知の制限事項：
  - SQL Server 2008以降のMicrosoftサポート版のみ対応
  - データベース名に?が含まれる場合、一部テストが失敗する可能性あり
  - @OutputServerName使用時、QueryPlansはNVARCHAR(MAX)として出力される

---

## コードリーディングガイド

本画面を理解するために参照すべきファイルと、推奨する読み解き順序を以下に示す。

### 推奨読解順序

#### Step 1: データ構造を理解する

まず、結果セットの構造と一時テーブルの定義を理解することが重要である。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | sp_Blitz.sql | `sp_Blitz.sql` | 行480-494: #BlitzResults一時テーブルの定義。結果セットの構造を理解 |
| 1-2 | sp_Blitz.sql | `sp_Blitz.sql` | 行558-566: #SkipChecks一時テーブルの定義。スキップ機能の理解 |

**読解のコツ**: T-SQLの一時テーブル（#で始まる）はセッションスコープで作成される。結果セットの列定義は#BlitzResultsの構造と対応している。

#### Step 2: エントリーポイントを理解する

プロシージャのシグネチャとパラメータ処理を特定する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | sp_Blitz.sql | `sp_Blitz.sql` | 行5-35: ALTER PROCEDUREとパラメータ定義。入力パラメータの全容を把握 |
| 2-2 | sp_Blitz.sql | `sp_Blitz.sql` | 行42-48: バージョン情報とVersionCheckMode処理 |
| 2-3 | sp_Blitz.sql | `sp_Blitz.sql` | 行50-122: @Help処理とヘルプメッセージ |

**主要処理フロー**:
1. **行42**: バージョン設定 `@Version = '8.29', @VersionDate = '20260203'`
2. **行50-122**: @Help = 1の場合、ヘルプメッセージを表示して終了
3. **行124-128**: @OutputType = 'SCHEMA'の場合、スキーマ情報を返却

#### Step 3: 権限チェック処理を理解する

非sysadminユーザーの権限チェック処理を理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | sp_Blitz.sql | `sp_Blitz.sql` | 行259-285: sysadmin判定とVIEW SERVER STATE権限チェック |
| 3-2 | sp_Blitz.sql | `sp_Blitz.sql` | 行287-435: 各種権限に基づくスキップフラグ設定 |

**主要処理フロー**:
- **行260-270**: IS_SRVROLEMEMBER('sysadmin')でsysadmin判定
- **行275-285**: VIEW SERVER STATE権限チェック、なければ即座にRETURN
- **行287-435**: xp_fixeddrives、ALTER TRACE、sp_validatelogins等の個別権限チェック

#### Step 4: チェック実行処理を理解する

各種ヘルスチェックの実行ロジックを理解する。実際のチェック処理は1000行以降に多数定義されている。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 4-1 | sp_Blitz.sql | `sp_Blitz.sql` | 行545-716: スキップチェック処理の詳細 |
| 4-2 | sp_Blitz.sql | `sp_Blitz.sql` | 行780-904: 環境検出（RDS、Managed Instance、Express Edition） |

### プログラム呼び出し階層図

```
sp_Blitz
    │
    ├─ パラメータ検証・初期化
    │      ├─ バージョンチェック
    │      ├─ @Help処理
    │      └─ @OutputType='SCHEMA'処理
    │
    ├─ 権限チェック
    │      ├─ sysadmin判定
    │      ├─ VIEW SERVER STATE確認
    │      └─ 個別権限チェック（xp_fixeddrives等）
    │
    ├─ 環境検出
    │      ├─ Amazon RDS検出
    │      ├─ Azure Managed Instance検出
    │      └─ Express Edition検出
    │
    ├─ #SkipChecksテーブル構築
    │      └─ ユーザー指定スキップ読み込み
    │
    ├─ 各種チェック実行（200+項目）
    │      ├─ セキュリティチェック
    │      ├─ パフォーマンスチェック
    │      ├─ バックアップチェック
    │      └─ 構成チェック
    │
    └─ 結果出力
           ├─ TABLE形式
           ├─ MARKDOWN形式
           ├─ XML形式
           └─ 出力テーブル保存
```

### データフロー図

```
[入力]                      [処理]                           [出力]

@パラメータ群 ───────▶ sp_Blitz ─────────────────────▶ 結果セット
                           │                                 │
                           ▼                                 ▼
                    sys.databases ──▶ #BlitzResults ──▶ Priority順
                    sys.configurations                    リスト表示
                    sys.dm_* (各種DMV)
                    msdb.dbo.sysjobs
                    master.sys.traces
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| sp_Blitz.sql | `sp_Blitz.sql` | ソース | メインプロシージャ定義（約10,000行） |
