# アーキテクチャ構成図

## システム全体構成図

```mermaid
graph TB
    subgraph "SQL Server First Responder Kit"
        subgraph "診断ツール群"
            sp_Blitz["sp_Blitz<br/>総合ヘルスチェック"]
            sp_BlitzFirst["sp_BlitzFirst<br/>リアルタイム診断"]
            sp_BlitzCache["sp_BlitzCache<br/>クエリキャッシュ分析"]
            sp_BlitzIndex["sp_BlitzIndex<br/>インデックス分析"]
            sp_BlitzLock["sp_BlitzLock<br/>デッドロック分析"]
            sp_BlitzWho["sp_BlitzWho<br/>現在実行中クエリ"]
            sp_BlitzBackups["sp_BlitzBackups<br/>バックアップ分析"]
            sp_BlitzAnalysis["sp_BlitzAnalysis<br/>履歴データ分析"]
        end

        subgraph "ユーティリティ"
            sp_DatabaseRestore["sp_DatabaseRestore<br/>リストア自動化"]
            sp_ineachdb["sp_ineachdb<br/>複数DB一括実行"]
        end

        subgraph "インストール"
            InstallAll["Install-All-Scripts.sql"]
            InstallAzure["Install-Azure.sql"]
            Uninstall["Uninstall.sql"]
        end
    end

    subgraph "SQL Server"
        subgraph "DMV / システムビュー"
            dm_exec["dm_exec_*<br/>実行統計"]
            dm_os["dm_os_*<br/>OS統計"]
            dm_db["dm_db_*<br/>DB統計"]
            sys_db["sys.databases<br/>sys.objects等"]
        end

        subgraph "システムデータベース"
            master["master"]
            msdb["msdb"]
            tempdb["tempdb"]
        end

        subgraph "拡張イベント"
            system_health["system_health<br/>セッション"]
        end
    end

    subgraph "外部連携"
        OutputTable["出力テーブル<br/>(ユーザー指定)"]
        OlaHallengren["Ola Hallengren<br/>Maintenance Scripts"]
        OpenAI["OpenAI API<br/>(オプション)"]
    end

    sp_Blitz --> dm_exec
    sp_Blitz --> dm_os
    sp_Blitz --> sys_db
    sp_Blitz --> msdb

    sp_BlitzFirst --> dm_exec
    sp_BlitzFirst --> dm_os
    sp_BlitzFirst --> sp_BlitzWho
    sp_BlitzFirst --> sp_BlitzCache
    sp_BlitzFirst --> OutputTable

    sp_BlitzCache --> dm_exec
    sp_BlitzCache --> OpenAI

    sp_BlitzIndex --> dm_db
    sp_BlitzIndex --> sys_db

    sp_BlitzLock --> system_health

    sp_BlitzWho --> dm_exec

    sp_BlitzBackups --> msdb

    sp_BlitzAnalysis --> OutputTable

    sp_DatabaseRestore --> OlaHallengren
```

## コンポーネント依存関係図

```mermaid
graph LR
    subgraph "コア診断"
        Blitz["sp_Blitz"]
        BlitzFirst["sp_BlitzFirst"]
        BlitzCache["sp_BlitzCache"]
        BlitzIndex["sp_BlitzIndex"]
        BlitzLock["sp_BlitzLock"]
        BlitzWho["sp_BlitzWho"]
    end

    subgraph "補助診断"
        BlitzBackups["sp_BlitzBackups"]
        BlitzAnalysis["sp_BlitzAnalysis"]
    end

    subgraph "ユーティリティ"
        DatabaseRestore["sp_DatabaseRestore"]
        ineachdb["sp_ineachdb"]
    end

    BlitzFirst -->|"呼び出し"| BlitzWho
    BlitzFirst -->|"呼び出し"| BlitzCache
    BlitzAnalysis -->|"参照"| BlitzFirst

    style BlitzFirst fill:#f9f,stroke:#333,stroke-width:2px
    style Blitz fill:#bbf,stroke:#333,stroke-width:2px
```

## データフロー図

```mermaid
flowchart TB
    subgraph "入力"
        User["DBA / 開発者"]
        Agent["SQL Server Agent<br/>(定期実行)"]
    end

    subgraph "実行"
        Proc["ストアドプロシージャ"]
        TempTable["#一時テーブル"]
    end

    subgraph "データソース"
        DMV["DMV"]
        SysTable["システムテーブル"]
        XE["Extended Events"]
    end

    subgraph "出力"
        ResultSet["結果セット<br/>(SSMS表示)"]
        OutputTable["出力テーブル<br/>(永続化)"]
        XML["XML出力"]
        Markdown["Markdown出力"]
    end

    User -->|"EXEC"| Proc
    Agent -->|"スケジュール実行"| Proc

    Proc -->|"クエリ"| DMV
    Proc -->|"クエリ"| SysTable
    Proc -->|"XML解析"| XE

    DMV -->|"結果"| TempTable
    SysTable -->|"結果"| TempTable
    XE -->|"結果"| TempTable

    TempTable -->|"@OutputType=TABLE"| ResultSet
    TempTable -->|"@Output*指定"| OutputTable
    TempTable -->|"@OutputType=XML"| XML
    TempTable -->|"@OutputType=MARKDOWN"| Markdown
```

## 診断結果の優先度体系

```mermaid
graph TB
    subgraph "優先度レベル"
        P0["Priority 0<br/>情報のみ"]
        P1["Priority 1<br/>即座に対応必要"]
        P5["Priority 5<br/>高優先度"]
        P10["Priority 10<br/>パフォーマンス問題"]
        P20["Priority 20<br/>信頼性問題"]
        P50["Priority 50<br/>要注意"]
        P100["Priority 100<br/>低優先度"]
        P200["Priority 200<br/>情報提供"]
        P250["Priority 250<br/>サーバー情報"]
    end

    P0 --> P1
    P1 --> P5
    P5 --> P10
    P10 --> P20
    P20 --> P50
    P50 --> P100
    P100 --> P200
    P200 --> P250

    style P1 fill:#f00,color:#fff
    style P5 fill:#f60,color:#fff
    style P10 fill:#fa0,color:#000
    style P20 fill:#ff0,color:#000
    style P50 fill:#9f0,color:#000
    style P100 fill:#0f9,color:#000
```

## 実行フロー図

```mermaid
sequenceDiagram
    participant User as DBA
    participant SP as ストアドプロシージャ
    participant TT as 一時テーブル
    participant DMV as DMV/システムテーブル
    participant OT as 出力テーブル

    User->>SP: EXEC sp_Blitz @Help=0

    SP->>SP: パラメータ検証
    SP->>SP: 権限チェック

    SP->>TT: CREATE TABLE #BlitzResults

    loop 各チェック項目
        SP->>DMV: SELECT FROM sys.dm_*
        DMV-->>SP: 結果
        SP->>TT: INSERT INTO #BlitzResults
    end

    alt @OutputTableName指定あり
        SP->>OT: INSERT INTO 出力テーブル
        OT-->>SP: 完了
    end

    SP->>SP: SELECT FROM #BlitzResults ORDER BY Priority
    SP-->>User: 結果セット
```

## sp_BlitzFirst 詳細フロー

```mermaid
sequenceDiagram
    participant User as DBA
    participant BF as sp_BlitzFirst
    participant BW as sp_BlitzWho
    participant BC as sp_BlitzCache
    participant DMV as DMV

    User->>BF: EXEC sp_BlitzFirst @Seconds=5

    BF->>BW: EXEC sp_BlitzWho (開始時点)
    BW-->>BF: 現在のクエリ

    BF->>DMV: 初回サンプル取得

    BF->>BF: WAITFOR DELAY @Seconds

    BF->>DMV: 2回目サンプル取得

    BF->>BF: 差分計算・分析

    BF->>BC: EXEC sp_BlitzCache (オプション)
    BC-->>BF: キャッシュ分析結果

    BF->>BW: EXEC sp_BlitzWho (終了時点)
    BW-->>BF: 現在のクエリ

    BF-->>User: 診断結果
```
