# 通知設計書 76-チェック実行

## 概要

本ドキュメントは、SQL Server First Responder Kitのsp_Blitzおよびsp_BlitzIndexプロシージャにおいて、各種チェック（CheckID）を実行する際に出力される情報通知「チェック実行」について定義する。

### 本通知の処理概要

本通知は、sp_Blitzストアドプロシージャ内で、個々のチェック項目（CheckID）の実行を開始したことをユーザーに通知するための情報メッセージである。デバッグモード時のみ出力される。

**業務上の目的・背景**：sp_Blitzは、SQL Serverの設定やパフォーマンスに関する多数のチェック項目を順次実行し、問題点を検出するプロシージャである。各チェック項目にはCheckIDが割り当てられており、デバッグモードでは現在実行中のCheckIDを表示することで、処理の進捗状況や問題発生箇所の特定を容易にする。この通知は、トラブルシューティングや処理時間の分析に役立つ。

**通知の送信タイミング**：sp_Blitzプロシージャ内で各チェック項目の実行を開始する直前に送信される。@Debugパラメータが1または2に設定されている場合のみ出力される。

**通知の受信者**：SQL Server Management Studio（SSMS）やその他のクライアントツールでsp_Blitzをデバッグモードで実行している管理者・DBA。メッセージタブに情報として表示される。

**通知内容の概要**：「Running CheckId [%d].」という形式で、現在実行中のCheckID番号が出力される。CheckIDは各チェック項目を一意に識別する番号である。

**期待されるアクション**：この通知はデバッグ・トラブルシューティング目的であり、通常運用では特別なアクションは不要。処理が特定のCheckIDで長時間停滞している場合、そのチェック項目に問題がある可能性を示唆する。

## 通知種別

コンソール出力（RAISERROR WITH NOWAIT）

## 送信仕様

### 基本情報

| 項目 | 内容 |
|-----|------|
| 送信方式 | 同期（WITH NOWAIT指定により即時出力） |
| 優先度 | 低（情報レベル：severity 0） |
| リトライ | 無し |

### 送信先決定ロジック

実行中のセッションのクライアント（SSMSのメッセージタブ等）に対して直接出力される。@Debug IN (1, 2)の条件を満たす場合のみ出力。

## 通知テンプレート

### コンソール出力の場合

| 項目 | 内容 |
|-----|------|
| 出力先 | クライアントのメッセージストリーム |
| メッセージレベル | 0（情報） |
| 状態 | 1 |

### 本文テンプレート

```
Running CheckId [%d].
```

### 添付ファイル

なし

## テンプレート変数

| 変数名 | 説明 | データ取得元 | 必須 |
|--------|------|-------------|-----|
| %d | 実行中のCheckID番号 | 各チェック項目のハードコードされたID | Yes |

## 送信トリガー・条件

### トリガー一覧

| トリガー種別 | トリガーイベント | 送信条件 | 説明 |
|------------|----------------|---------|------|
| プロシージャ内部処理 | チェック実行開始 | @Debug IN (1, 2) | 各CheckIDの処理を開始する直前 |

### 送信抑止条件

| 条件 | 説明 |
|-----|------|
| @Debug = 0 または NULL | デバッグモードでない場合は出力されない |

## 処理フロー

### 送信フロー

```mermaid
flowchart TD
    A[sp_Blitz開始] --> B[パラメータ検証]
    B --> C{@Debug IN (1, 2)?}
    C -->|Yes| D[次のチェック項目へ]
    C -->|No| E[チェック実行（通知なし）]
    D --> F["RAISERROR('Running CheckId [%d].',0,1,CheckID) WITH NOWAIT"]
    F --> G[チェック処理実行]
    G --> H{次のチェックあり?}
    H -->|Yes| D
    H -->|No| I[処理完了]
    E --> G
```

## データベース参照・更新仕様

### 参照テーブル一覧

各CheckIDによって参照されるテーブルは異なる。代表的なものは以下の通り。

| テーブル名 | 用途 | 備考 |
|-----------|------|------|
| sys.databases | データベース状態確認 | 複数のCheckIDで使用 |
| sys.configurations | サーバー設定確認 | 設定関連のCheckIDで使用 |
| msdb.dbo.backupset | バックアップ履歴確認 | バックアップ関連のCheckIDで使用 |
| sys.dm_os_wait_stats | 待機統計確認 | パフォーマンス関連のCheckIDで使用 |

### テーブル別参照項目詳細

本通知自体はRAISERRORによる単純なメッセージ出力のため、直接的なテーブル参照は行わない。

### 更新テーブル一覧

| テーブル名 | 操作 | 概要 |
|-----------|------|------|
| #BlitzResults | INSERT | 各チェックで発見された問題を格納 |

## エラー処理

### エラーケース一覧

| エラー種別 | 発生条件 | 対処方法 |
|----------|---------|---------|
| 該当なし | 本通知は情報出力のみでエラーは発生しない | - |

### リトライ仕様

| 項目 | 内容 |
|-----|------|
| リトライ回数 | 0（リトライなし） |
| リトライ間隔 | - |
| リトライ対象エラー | - |

## 配信設定

### レート制限

| 項目 | 内容 |
|-----|------|
| 1分あたり上限 | 制限なし |
| 1日あたり上限 | 制限なし |

### 配信時間帯

制限なし（sp_Blitz実行時、デバッグモード有効時に出力）

## セキュリティ考慮事項

- 本通知はCheckID番号のみを含み、機密情報は含まない
- VIEW SERVER STATE権限を持つユーザーのみがsp_Blitzを実行可能

## 備考

- WITH NOWAIT指定により、バッファリングされずに即時クライアントに送信される
- CheckIDは数百種類存在し、各々が特定のチェック項目を表す
- CheckID一覧は sp_Blitz.sql 内で確認可能
- @Debug = 1 は通常のデバッグ出力、@Debug = 2 はより詳細なデバッグ出力

---

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

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

### 推奨読解順序

#### Step 1: デバッグパラメータを理解する

@Debugパラメータの動作を理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | sp_Blitz.sql | `sp_Blitz.sql` | パラメータ宣言部分で@Debugの定義を確認 |

**読解のコツ**: @Debug IN (1, 2) の条件が各所で使用されていることを確認する。

#### Step 2: CheckID実行パターンを理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | sp_Blitz.sql | `sp_Blitz.sql` | 行1173付近のCheckID 185の例 |
| 2-2 | sp_Blitz.sql | `sp_Blitz.sql` | 行1314付近のCheckID 1の例 |

**主要処理フロー**:
1. **行1173**: `IF @Debug IN (1, 2) RAISERROR('Running CheckId [%d].', 0, 1, 185) WITH NOWAIT;`
2. **行1174-1193**: CheckID 185の実際の処理（待機統計クリア確認）
3. **行1314**: `IF @Debug IN (1, 2) RAISERROR('Running CheckId [%d].', 0, 1, 1) WITH NOWAIT;`
4. **行1316-1354**: CheckID 1の実際の処理（バックアップ未実施確認）

#### Step 3: 代表的なCheckIDの処理内容を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | sp_Blitz.sql | `sp_Blitz.sql` | 各CheckIDブロックの処理内容 |

**主要なCheckID例**:
- **CheckID 1**: バックアップ未実施のデータベース検出
- **CheckID 2**: フルリカバリモデルでログバックアップ未実施
- **CheckID 185**: 待機統計がクリアされている

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

```
sp_Blitz（エントリーポイント）
    │
    ├─ パラメータ検証
    │
    ├─ 初期化処理
    │
    └─ チェック実行ループ
           │
           ├─ @Debug確認 → RAISERROR('Running CheckId [185]') ← 本通知
           │                    └─ CheckID 185 処理
           │
           ├─ @Debug確認 → RAISERROR('Running CheckId [1]') ← 本通知
           │                    └─ CheckID 1 処理
           │
           ├─ @Debug確認 → RAISERROR('Running CheckId [2]') ← 本通知
           │                    └─ CheckID 2 処理
           │
           └─ ... 他のCheckID
```

### データフロー図

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

@Debug = 1 or 2          ───▶ チェック実行               ───▶ クライアントメッセージ
                                │                                 「Running CheckId [N].」
                                │
各システムテーブル        ───▶ 問題検出                  ───▶ #BlitzResultsへINSERT
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| sp_Blitz.sql | `sp_Blitz.sql` | ソース | メインプロシージャ。多数のCheckID実行通知を出力 |
| sp_BlitzIndex.sql | `sp_BlitzIndex.sql` | ソース | インデックス分析プロシージャ（一部CheckIDを共有） |
| Install-All-Scripts.sql | `Install-All-Scripts.sql` | インストール | 全スクリプトを含むインストールファイル |
