# 機能設計書 461-Get-DbaResourceGovernor

## 概要

本ドキュメントは、SQL ServerインスタンスからResource Governor構成とステータス情報を取得するGet-DbaResourceGovernor機能の設計を記述する。

### 本機能の処理概要

Get-DbaResourceGovernorは、SQL ServerのResource Governor（リソースガバナー）オブジェクトを取得し、その構成詳細、有効状態、および関連するリソースプール情報を一元的に確認できるようにする機能である。

**業務上の目的・背景**：SQL ServerのResource Governorは、ワークロードとリソース消費を管理するための重要な機能であり、CPU、メモリ、I/O使用量に制限を設定することで、異なるワークロード間でのリソース競合を防止する。DBAはこの機能を使用して、Resource Governorが有効かどうか、どの分類関数が設定されているか、現在のリソースプール構成がどうなっているかを迅速に確認できる必要がある。カスタムT-SQLクエリを記述せずにこれらの情報を取得できることで、運用効率が向上する。

**機能の利用シーン**：
- SQL Serverインスタンスのリソース管理状態を監査する場合
- Resource Governor設定の一覧を取得してドキュメント化する場合
- 複数インスタンス間でResource Governor構成を比較する場合
- パフォーマンス問題のトラブルシューティング時にリソース制限設定を確認する場合

**主要な処理内容**：
1. 指定されたSQL Serverインスタンスに接続する（SQL Server 2008以降必須）
2. SMOを通じてResourceGovernorオブジェクトを取得する
3. ComputerName、InstanceName、SqlInstanceのカスタムプロパティを追加する
4. デフォルト表示プロパティを設定して結果を出力する

**関連システム・外部連携**：SMO（SQL Server Management Objects）を使用してSQL Serverと連携する。Connect-DbaInstanceを通じた接続認証を利用する。

**権限による制御**：Resource Governor情報の取得には、SQL Serverインスタンスへの接続権限が必要。VIEW SERVER STATE権限があれば基本的な情報を取得可能。

## 関連画面

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 112 | リソースガバナー | 主機能 | リソースガバナーの取得 |

## 機能種別

SELECT / 情報取得

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | 説明 | バリデーション |
|-------------|-----|-----|------|---------------|
| SqlInstance | DbaInstanceParameter[] | Yes | 対象のSQL Serverインスタンス | パイプライン入力可能 |
| SqlCredential | PSCredential | No | 代替認証情報 | Windows認証、SQL認証、AD認証をサポート |
| EnableException | switch | No | 例外を直接スローするかどうか | - |

### 入力データソース

- パラメータ入力（コマンドライン）
- パイプライン入力（SqlInstanceパラメータ）

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| ComputerName | String | SQL Serverインスタンスのコンピュータ名 |
| InstanceName | String | SQL Serverインスタンス名 |
| SqlInstance | String | 完全なSQL Serverインスタンス名 (computer\instance) |
| ClassifierFunction | String | Resource Governor分類関数の完全修飾名 |
| Enabled | Boolean | Resource Governorが有効かどうか |
| MaxOutstandingIOPerVolume | Int32 | ディスクボリュームあたりの最大未処理I/O操作数 |
| ReconfigurePending | Boolean | 構成変更が保留中かどうか |
| ResourcePools | ResourcePoolCollection | インスタンスに定義されたResourcePoolオブジェクトのコレクション |
| ExternalResourcePools | ExternalResourcePoolCollection | 機械学習ワークロード用のExternalResourcePoolオブジェクトのコレクション |

### 出力先

- PowerShellパイプライン（標準出力）
- Microsoft.SqlServer.Management.Smo.ResourceGovernor オブジェクト

## 処理フロー

### 処理シーケンス

```
1. SqlInstanceパラメータの各インスタンスに対して繰り返し処理
   └─ foreachループで複数インスタンスをサポート
2. Connect-DbaInstanceを使用してSQL Serverに接続
   └─ MinimumVersion 10（SQL Server 2008以降）を指定
3. 接続失敗時はStop-Functionでエラーハンドリング
   └─ -Continueで次のインスタンスへ処理を継続
4. サーバーオブジェクトからResourceGovernorプロパティを取得
   └─ $server.ResourceGovernor
5. ResourceGovernorオブジェクトにカスタムプロパティを追加
   └─ ComputerName, InstanceName, SqlInstance
6. Select-DefaultViewでデフォルト表示プロパティを設定して出力
```

### フローチャート

```mermaid
flowchart TD
    A[開始] --> B[SqlInstanceループ開始]
    B --> C{Connect-DbaInstance接続}
    C -->|成功| D[ResourceGovernorオブジェクト取得]
    C -->|失敗| E[Stop-Function: ConnectionError]
    E --> B
    D --> F{ResourceGovernorが存在?}
    F -->|Yes| G[カスタムプロパティ追加]
    F -->|No| H[次のインスタンスへ]
    G --> I[Select-DefaultViewで出力]
    I --> H
    H --> B
    B --> J[終了]
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-001 | 最小バージョン要件 | SQL Server 2008 (バージョン10) 以降が必要 | 全ての接続時 |
| BR-002 | パイプラインサポート | SqlInstanceパラメータはパイプラインから受け取り可能 | パイプライン使用時 |
| BR-003 | 複数インスタンス対応 | 複数のSQL Serverインスタンスを一度に処理可能 | 複数インスタンス指定時 |

### 計算ロジック

該当なし（情報取得機能のため）

## データベース操作仕様

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

| 操作 | 対象テーブル | 操作種別 | 概要 |
|-----|-------------|---------|------|
| 情報取得 | sys.resource_governor_configuration | SELECT | Resource Governor構成情報の取得（SMO経由） |

### テーブル別操作詳細

SMOを使用するため、直接のテーブルアクセスは行わない。SMOがResource Governorの構成情報を内部的に取得する。

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| ConnectionError | 接続エラー | SQL Serverへの接続失敗 | 資格情報とネットワーク接続を確認 |
| MinimumVersion | バージョンエラー | SQL Server 2008より前のバージョン | 対応バージョンのSQL Serverを使用 |

### リトライ仕様

リトライ処理は実装されていない。接続エラー時は次のインスタンスへ処理を継続する。

## トランザクション仕様

読み取り専用操作のため、トランザクション管理は不要。

## パフォーマンス要件

- SMOを使用した軽量なメタデータ取得のため、レスポンスは通常1秒未満
- 複数インスタンス指定時は順次処理

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

- SqlCredentialパラメータによる安全な認証情報の受け渡し
- Windows認証、SQL認証、Active Directory認証をサポート
- VIEW SERVER STATE権限が推奨される

## 備考

- Resource Governorは SQL Server 2008 Enterprise Edition以降で利用可能
- External Resource PoolsはSQL Server 2016以降の機械学習サービス向け機能

---

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

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

### 推奨読解順序

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

まず、返却されるオブジェクトの構造を理解することが重要。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | Get-DbaResourceGovernor.ps1 | `public/Get-DbaResourceGovernor.ps1` | .OUTPUTSセクション（36-56行目）で出力オブジェクトの構造を確認 |

**読解のコツ**: Microsoft.SqlServer.Management.Smo.ResourceGovernor クラスはSMOの標準クラス。Add-Memberで追加されるComputerName、InstanceName、SqlInstanceプロパティはdbatools標準の拡張プロパティ。

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

処理の起点となるprocess ブロックを特定。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | Get-DbaResourceGovernor.ps1 | `public/Get-DbaResourceGovernor.ps1` | processブロック（77-95行目）がメイン処理 |

**主要処理フロー**:
1. **77行目**: processブロック開始
2. **78行目**: foreachで複数SqlInstanceをループ処理
3. **79-83行目**: try-catchでConnect-DbaInstance接続、失敗時はStop-Function
4. **85行目**: $server.ResourceGovernorでResourceGovernorオブジェクト取得
5. **87-91行目**: Add-Memberでカスタムプロパティ追加
6. **93行目**: Select-DefaultViewでデフォルト表示プロパティを設定して出力

#### Step 3: 依存関数を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | Connect-DbaInstance | `public/Connect-DbaInstance.ps1` | SQL Server接続処理、MinimumVersionパラメータの使用方法 |
| 3-2 | Select-DefaultView | `private/functions/Select-DefaultView.ps1` | デフォルト表示プロパティの設定方法 |

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

```
Get-DbaResourceGovernor
    │
    ├─ Connect-DbaInstance
    │      └─ -MinimumVersion 10 (SQL Server 2008+)
    │
    ├─ Stop-Function (エラー時)
    │
    ├─ Add-Member (カスタムプロパティ追加)
    │
    └─ Select-DefaultView (出力フォーマット)
```

### データフロー図

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

SqlInstance ───────▶ Connect-DbaInstance ────▶ SMO Server Object
                            │
                            ▼
                     $server.ResourceGovernor
                            │
                            ▼
                     Add-Member (拡張)
                            │
                            ▼
                     Select-DefaultView ────▶ ResourceGovernor Object
                                              (with custom properties)
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| Get-DbaResourceGovernor.ps1 | `public/Get-DbaResourceGovernor.ps1` | ソース | 本機能のメイン実装 |
| Connect-DbaInstance.ps1 | `public/Connect-DbaInstance.ps1` | ソース | SQL Server接続処理 |
| Select-DefaultView.ps1 | `private/functions/Select-DefaultView.ps1` | ソース | デフォルト表示プロパティ設定 |
| Stop-Function.ps1 | `private/functions/Stop-Function.ps1` | ソース | エラーハンドリング |
