# 非機能要件定義書

## 概要

本ドキュメントは、SQL Server First Responder Kitの非機能要件を定義するものです。SQL Server First Responder Kitは、SQL Serverの診断・パフォーマンス分析ツールキットであり、DBA、システム管理者、開発者がSQL Serverの状態を把握し、問題を特定するためのストアドプロシージャ群で構成されています。

## 性能要件

### レスポンスタイム

| 処理種別 | 目標値 | 備考 |
| --- | --- | --- |
| sp_BlitzFirst サンプリング | デフォルト5秒 | @Secondsパラメータで調整可能（0-600秒） |
| sp_BlitzCache クエリ分析 | 処理対象による | @Top=10（デフォルト）の場合、数秒〜数十秒 |
| sp_BlitzIndex インデックス分析 | 処理対象による | @ThresholdMB=250でフィルタリング |
| sp_Blitz 健全性チェック | 数分〜数十分 | データベース数・オブジェクト数に依存 |

### スループット

| 項目 | 目標値 | 備考 |
| --- | --- | --- |
| 同時実行 | 制限なし | ただし、READ UNCOMMITTEDで動作 |
| 処理データベース数 | デフォルト50まで | 50以上は@BringThePain=1が必要 |
| 分析対象クエリ数 | デフォルト10件（@Top） | @BringThePain=1で増加可能 |

### パフォーマンス最適化設定

| 設定項目 | 設定値 | 根拠 |
| --- | --- | --- |
| トランザクション分離レベル | READ UNCOMMITTED | ロック競合回避、診断ツールとしての即時性確保 |
| SET NOCOUNT | ON | ネットワークオーバーヘッド削減 |
| SET STATISTICS XML | OFF | 実行計画取得オーバーヘッド回避 |
| SET STATISTICS IO/TIME | OFF | I/O・時間統計取得オーバーヘッド回避 |
| OPTION (RECOMPILE) | 使用 | パラメータ最適化のため |

## 可用性要件

| 項目 | 目標値 | 備考 |
| --- | --- | --- |
| 稼働率 | SQL Serverの可用性に依存 | ストアドプロシージャとして動作 |
| 計画停止時間 | N/A | スクリプト更新時のみ |
| 障害復旧時間（RTO） | N/A | ステートレス設計 |
| 目標復旧時点（RPO） | N/A | データ保持なし（出力テーブル除く） |

### プラットフォーム互換性

| プラットフォーム | サポート状況 | 備考 |
| --- | --- | --- |
| SQL Server on Windows | 完全サポート | Microsoftサポート対象バージョンのみ |
| SQL Server on Linux | 完全サポート | sp_DatabaseRestoreを除く（xp_cmdshell非対応） |
| Amazon RDS SQL Server | 完全サポート | - |
| Azure SQL DB | 非サポート（限定動作） | DMV変更に対応困難 |
| SQL Server 2017/2019/2022 | テスト済み | CI/CDパイプラインで検証 |

## セキュリティ要件

### 必要権限

| 権限レベル | 必要な権限 | 用途 |
| --- | --- | --- |
| 最小権限 | VIEW SERVER STATE | サーバー状態DMVへのアクセス |
| 推奨権限 | sysadmin | 全機能の利用（DBCCコマンド含む） |
| オプション | ALTER TRACE | トレース情報へのアクセス |
| オプション | EXECUTE on xp_fixeddrives | ディスク情報取得 |
| オプション | EXECUTE on xp_cmdshell | sp_DatabaseRestoreで使用 |

### 権限チェック機能

- 実行時に権限を動的にチェックし、不足している場合は該当チェックをスキップ
- sysadmin以外のユーザーでも限定的な機能が利用可能
- DBCCコマンドはsysadmin権限がない場合は自動スキップ

### セキュリティ検査項目（sp_Blitz）

以下のセキュリティリスクを検出・警告:
- sysadmin権限を持つログイン
- securityadmin権限を持つログイン
- CONTROL SERVER権限を持つプリンシパル
- 自動起動ストアドプロシージャ
- リンクサーバーのセキュリティ設定
- 無効なログイン

## 拡張性要件

### スケーラビリティ

| 項目 | 対応 | 備考 |
| --- | --- | --- |
| 大規模データベース対応 | @ThresholdMBでフィルタリング | デフォルト250MB以上のオブジェクトのみ分析 |
| 多数データベース対応 | @BringThePain=1で50以上対応 | パフォーマンス低下を許容 |
| パーティションテーブル | @SkipPartitions=1でスキップ可能 | 100パーティション超は@BringThePain=1必要 |
| 出力データ保持 | @OutputTableRetentionDays | デフォルト7日間 |

### バージョン管理

- 各プロシージャに@Version、@VersionDateパラメータ
- @VersionCheckMode=1で現行バージョンの確認が可能
- First Responder Kit全体の整合性チェック機能

## 保守性要件

### コード品質基準

| 項目 | 要件 |
| --- | --- |
| 互換性 | Microsoftサポート対象の全SQL Serverバージョンで動作 |
| 大文字小文字 | 大文字小文字区別サーバー・データベース対応 |
| Unicode | Unicodeオブジェクト名対応 |
| 日付フォーマット | 複数日付フォーマット対応 |

### デバッグ機能

| パラメータ | 機能 |
| --- | --- |
| @Debug = 0 | サイレントモード（デフォルト） |
| @Debug = 1 | 処理ステップのメッセージ出力 |
| @Debug = 2 | 動的SQL文の出力 |
| @Help = 1 | ヘルプ情報の表示 |

### エラーハンドリング

- RAISERROR によるエラー・警告メッセージの出力
- TRY-CATCH ブロックによる例外処理
- 権限不足時の適切なスキップ処理

## 運用・監視要件

### ログ出力機能

| 出力先テーブル | 用途 | プロシージャ |
| --- | --- | --- |
| BlitzResults | sp_Blitz結果 | sp_Blitz |
| BlitzFirst | リアルタイム診断結果 | sp_BlitzFirst |
| BlitzFirst_FileStats | ファイル統計 | sp_BlitzFirst |
| BlitzFirst_PerfmonStats | パフォーマンスカウンター | sp_BlitzFirst |
| BlitzFirst_WaitStats | 待機統計 | sp_BlitzFirst |
| BlitzCache | クエリキャッシュ分析 | sp_BlitzFirst/sp_BlitzCache |
| BlitzWho | 実行中クエリ | sp_BlitzFirst/sp_BlitzWho |

### 定期実行推奨間隔

| プロシージャ | 推奨間隔 | 備考 |
| --- | --- | --- |
| sp_Blitz | 日次〜週次 | 全体健全性チェック |
| sp_BlitzFirst | 15分毎 | リアルタイム監視 |
| sp_BlitzIndex | 月次 | インデックス分析 |
| sp_BlitzCache | 日次 | クエリパフォーマンス分析 |

### 閾値設定

| パラメータ | デフォルト値 | 説明 |
| --- | --- | --- |
| @FileLatencyThresholdMS | 100ms | ファイルI/Oレイテンシ警告閾値 |
| @ThresholdMB | 250MB | 分析対象最小オブジェクトサイズ |
| @MemoryGrantThresholdPct | 15.00% | メモリ許可警告閾値 |
| @MinimumExecutionCount | 0 | 最小実行回数フィルタ |

### ロギング機能

- @LogMessage パラメータによる手動ログ記録
- @LogMessagePriority、@LogMessageFindingsGroup等でログ分類
- @LogMessageURL で外部チケットシステム等との連携

## 備考

### 既知の制限事項

1. SQL Server 2008以前のバージョンはサポート対象外（Deprecatedフォルダに旧バージョンあり）
2. データベース名に疑問符(?)が含まれる場合、一部テストが失敗する可能性
3. オフラインデータベースがある場合、初回実行で失敗することがある
4. Azure SQL DBは公式サポート対象外（動作する場合もあるが保証なし）
5. Linked Server経由でXMLカラムを出力する際はNVARCHAR(MAX)に変換

### ライセンス

MIT License - 詳細はLICENSE.mdを参照

### サポート

- GitHub Issues: https://github.com/BrentOzarULTD/SQL-Server-First-Responder-Kit/issues
- Slack: #FirstResponderKit チャンネル（SQLCommunity.slack.com）
- Contributor Covenant Code of Conduct に準拠
