# 画面設計書 3-sp_BlitzCache 警告説明画面

## 概要

本ドキュメントは、SQL Server First Responder Kitのsp_BlitzCacheストアドプロシージャが出力する第2結果セット（警告説明グロッサリー）画面の設計仕様を記載する。

### 本画面の処理概要

sp_BlitzCache警告説明画面は、sp_BlitzCacheの第1結果セットで検出された警告（Warnings）の詳細説明を提供するグロッサリー形式の画面である。各警告の意味と対処方法をDBAに提示し、クエリチューニングの指針を提供する。

**業務上の目的・背景**：sp_BlitzCacheのメイン結果セットでは、各クエリに対して様々な警告フラグが付与される。しかし、警告名だけでは具体的な問題内容や対処方法が分かりにくい場合がある。第2結果セットでは、検出された警告のみを抽出し、それぞれの意味と推奨される対応を説明することで、DBAが効率的に問題を理解し、適切な対処を行えるようにする。これにより、クエリチューニングの学習曲線を緩やかにし、経験の浅いDBAでも適切な対応が可能となる。

**画面へのアクセス方法**：sp_BlitzCacheを実行すると、第1結果セット（クエリ詳細）に続いて自動的に第2結果セットとして表示される。@HideSummary = 1を指定すると、この第2結果セットは非表示となる。

**主要な操作・処理内容**：
1. 第1結果セットの分析で検出された警告を##BlitzCacheResultsに格納
2. 検出された警告のみをグロッサリー形式で出力
3. 各警告に対してPriority（優先度）、FindingsGroup（カテゴリ）、Finding（警告名）、Details（詳細）、URL（参照リンク）を提供

**画面遷移**：
- この画面から遷移できる画面：なし（参照情報の提供のみ）
- この画面に遷移してくる画面：sp_BlitzCache結果画面（第1結果セット）の直後に自動表示

**権限による表示制御**：sp_BlitzCache本体と同じ権限要件。追加の権限は不要。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 2 | sp_BlitzCache | 主機能 | sp_BlitzCacheの第2結果セットとして警告内容のグロッサリーを表示 |

## 画面種別

一覧（警告グロッサリー表示）

## URL/ルーティング

```sql
-- 第2結果セットは自動的に表示される
EXEC sp_BlitzCache;

-- 第2結果セットを非表示にする場合
EXEC sp_BlitzCache @HideSummary = 1;
```

## 入出力項目

### 入力パラメータ

第2結果セット固有のパラメータはない。sp_BlitzCache本体のパラメータを参照。

| パラメータ名 | データ型 | デフォルト値 | 説明 |
|-------------|---------|-------------|------|
| @HideSummary | BIT | 0 | 1を指定すると第2結果セット（警告説明）を非表示 |

## 表示項目

### 第2結果セット（警告サマリー/グロッサリー）

| 列名 | データ型 | 説明 |
|-----|---------|------|
| ID | INT | 警告の識別番号（IDENTITY） |
| CheckID | INT | チェック項目の識別番号 |
| Priority | TINYINT | 優先度（値が小さいほど重要） |
| FindingsGroup | VARCHAR(50) | 問題のカテゴリ |
| Finding | VARCHAR(500) | 問題/警告の名称 |
| URL | VARCHAR(200) | 詳細情報への参照リンク |
| Details | VARCHAR(4000) | 警告の詳細説明と対処方法 |

### 主要な警告カテゴリ（FindingsGroup）

| FindingsGroup | 説明 |
|--------------|------|
| Plan Warnings | クエリプランに含まれる警告 |
| Complexity | クエリの複雑性に関する警告 |
| Performance | パフォーマンスに関する警告 |
| Cardinality | カーディナリティ見積もりの問題 |
| Execution | 実行特性に関する警告 |

### 主要な警告項目（Finding）

| Finding | 説明 | 推奨対処 |
|---------|------|---------|
| Implicit Conversions | 暗黙的な型変換が発生 | データ型を一致させる |
| Missing Index | 欠落インデックスが検出された | インデックス追加を検討 |
| Parameter Sniffing | パラメータスニッフィングの疑い | OPTION(RECOMPILE)やプランガイド検討 |
| Unparameterized Query | パラメータ化されていないクエリ | パラメータ化を検討 |
| Long Running Query | 長時間実行クエリ | クエリチューニング |
| High Memory Grant | 高いメモリグラント | クエリまたはインデックス改善 |
| Table Scan | テーブルスキャン発生 | インデックス追加検討 |
| Key Lookup | キー参照が高コスト | カバリングインデックス検討 |
| Spills to TempDB | TempDBへのスピル発生 | メモリグラントまたはクエリ改善 |
| Forced Serialization | 強制直列化 | 並列処理の阻害要因を確認 |
| Cursor Usage | カーソル使用 | セットベース処理への変更検討 |
| Downlevel Estimator | 古いカーディナリティ見積もり | 互換性レベル更新検討 |
| Stale Statistics | 古い統計情報 | 統計情報の更新 |
| Table Variable | テーブル変数使用 | 一時テーブルへの変更検討 |
| No Join Predicate | 結合述語なし | クエリの見直し |
| Expensive Sort | 高コストソート | インデックスまたはクエリ改善 |
| Compute Scalar | スカラー計算がボトルネック | 計算ロジックの見直し |
| Row Goal | 行ゴール問題 | クエリヒントまたは設計見直し |

## イベント仕様

### 1-第2結果セット生成

sp_BlitzCache実行時、以下の処理で第2結果セットが生成される：

1. 第1結果セットの分析中に検出された警告を##BlitzCacheResultsに格納
2. @HideSummary = 0の場合、##BlitzCacheResultsから結果を取得
3. Priority順にソートして出力

### 2-警告検出トリガー

警告は以下の条件で検出される：

| 警告フラグ | ##BlitzCacheProcsの列 | 検出条件 |
|-----------|---------------------|---------|
| 暗黙的変換 | implicit_conversions | BIT = 1 |
| 欠落インデックス | missing_index_count | INT > 0 |
| パラメータスニッフィング | parameter_sniffing | BIT = 1 |
| テーブルスキャン | is_table_scan | BIT = 1 |
| キー参照高コスト | is_key_lookup_expensive | BIT = 1 |
| 大量スピル | is_big_spills | BIT = 1 |
| 古い統計 | stale_stats | BIT = 1 |
| カーソル使用 | is_cursor | BIT = 1 |
| 並列処理 | is_parallel | BIT = 1 |
| 強制プラン | is_forced_plan | BIT = 1 |
| 長時間実行 | long_running | BIT = 1 |

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

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

| 操作（イベント） | 対象テーブル | 操作種別 | 概要 |
|----------------|-------------|---------|------|
| 警告検出時 | ##BlitzCacheResults | INSERT | 検出された警告を格納 |

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

#### ##BlitzCacheResults（グローバル一時テーブル）

| 操作 | 項目（カラム名） | 更新値・取得条件 | 備考 |
|-----|-----------------|-----------------|------|
| INSERT | SPID | @@SPID | セッション識別 |
| INSERT | CheckID | 警告タイプ固有のID | 内部的に管理 |
| INSERT | Priority | 警告の優先度 | 値が小さいほど重要 |
| INSERT | FindingsGroup | 警告カテゴリ | Plan Warnings等 |
| INSERT | Finding | 警告名 | Implicit Conversions等 |
| INSERT | URL | 参照リンク | BrentOzar.com等 |
| INSERT | Details | 詳細説明 | 動的に生成 |

## メッセージ仕様

第2結果セット固有のメッセージはない。結果セットとして警告情報が表示される。

## 例外処理

| 例外状況 | 動作 |
|---------|------|
| 警告が検出されない | 空の結果セットまたは「問題なし」メッセージ |
| @HideSummary = 1 | 第2結果セット自体が出力されない |

## 備考

- 第2結果セットは第1結果セットで検出された警告のみを表示
- 同一の警告タイプが複数のクエリで検出されても、グロッサリーでは1回のみ表示
- URLは各警告タイプに対応する詳細ドキュメントへのリンク
- 警告の優先度は、パフォーマンスへの影響度に基づいて設定

---

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

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

### 推奨読解順序

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

第2結果セット用のグローバル一時テーブル構造を理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | sp_BlitzCache.sql | `sp_BlitzCache.sql` | 行38-47: ##BlitzCacheResultsテーブル定義。警告格納用 |

**読解のコツ**: ##BlitzCacheResultsは警告サマリー専用のテーブル。SPIDカラムでセッションを識別し、複数セッションでの並列実行に対応している。

#### Step 2: 警告検出ロジックを理解する

各警告がどのように検出されるかを理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | sp_BlitzCache.sql | `sp_BlitzCache.sql` | ##BlitzCacheProcsの警告フラグ列（行155-236） |
| 2-2 | sp_BlitzCache.sql | `sp_BlitzCache.sql` | 警告検出処理部分（コード後半） |

**主要処理フロー**:
1. プラン解析時に各警告フラグを設定
2. フラグがTRUEの警告を##BlitzCacheResultsにINSERT
3. @HideSummary = 0の場合、結果を返却

#### Step 3: 出力処理を理解する

結果セットの出力ロジックを理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | sp_BlitzCache.sql | `sp_BlitzCache.sql` | @HideSummary判定と出力処理 |

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

```
sp_BlitzCache
    │
    ├─ 第1結果セット生成
    │      ├─ プランキャッシュ取得
    │      ├─ プラン解析
    │      └─ 警告フラグ設定
    │
    ├─ 警告サマリー生成
    │      ├─ 警告フラグ判定
    │      └─ ##BlitzCacheResultsへINSERT
    │
    └─ 第2結果セット出力
           └─ @HideSummary判定
                  ├─ 0: ##BlitzCacheResultsを出力
                  └─ 1: 出力なし
```

### データフロー図

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

##BlitzCacheProcs ──▶ 警告フラグ判定 ─────────────────▶ 第2結果セット
  (警告フラグ列)           │                             （警告グロッサリー）
                           ▼
                    ##BlitzCacheResults
                      (警告格納)
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| sp_BlitzCache.sql | `sp_BlitzCache.sql` | ソース | メインプロシージャ定義 |
