mcpField
D
data-sql-optimization

data-sql-optimization

github.com/vasilyu1983データ・データベース231 回インストール
リポジトリ

data-sql-optimization について

PostgreSQL、MySQL、SQL Server、Oracle、SQLite の SQL ワークロードを診断・調整するデータベース性能スキルです。証拠に基づく分析、安全な変更手順、バージョンに応じた助言を重視します。

主な機能

  1. 01複数エンジン対応の SQL 性能ガイダンス
  2. 02PostgreSQL 統計情報による遅いクエリの調査
  3. 03推定プランと実行プランの収集
  4. 04インデックス、クエリ、ロック、プーリングの資料
  5. 05本番変更の検証とロールバック手順

活用シーン

  1. 01データベースの遅いクエリの調査
  2. 02実行プランとインデックス選択の確認
  3. 03ロック待ちや接続飽和の診断
  4. 04本番環境のチューニング変更の計画と検証

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/vasilyu1983/ai-agents-public --skill data-sql-optimization

インストール後、Claude Code で/data-sql-optimizationを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

learnings.consolidated.md
learnings.md
agents/
openai.yaml
assets/cross-platform/
template-backup-restore.md
template-diagnostics.md
template-explain-analysis.md
template-index.md
template-lock-analysis.md
template-migration.md
template-performance-tuning-worksheet.md
template-query-tuning.md
template-schema-design.md
template-security-audit.md
template-slow-query.md
assets/mssql/
template-mssql-explain.md
template-mssql-index.md
assets/mysql/
template-mysql-explain.md
template-mysql-index.md
template-replication-ha.md
assets/oracle/
template-oracle-explain.md
assets/postgres/
template-pg-explain.md
template-pg-index.md
template-pg-rls.md
template-replication-ha.md
assets/sqlite/
template-sqlite-optimization.md
data/
sources.json
versions.json
references/
connection-pooling-patterns.md
explain-analysis.md
index-patterns.md

詳細

SQL 最適化

対象外: OLAP エンジンおよびレイクハウスのチューニング。ClickHouse、DuckDB、Doris、StarRocks、Iceberg、Delta Lake、または Hudi には data-lake-platform を使用してください。

クイックリファレンス

スクリプト
スクリプト内容使用方法
scripts/pg_slow_query_triage.sqlpg_stat_statements による6項目のトリアージレポート:合計時間、平均時間、I/O、分散、キャッシュヒット率、スピル/プランニング/WALpsql または任意の SQL クライアントにコピーして実行します。pg_stat_statements 拡張機能が必要です
scripts/explain_collector.pypsql を使って推定 JSON プランを収集します。--analyze を指定するとクエリ実行が有効になりますDATABASE_URL=postgresql://... python explain_collector.py --queries slow.txt
scripts/test_explain_collector.pyオフライン入力、実行モード、JSON エンベロープのリグレッションテストpython scripts/test_explain_collector.py
# Triage: paste directly into psql
psql "$DATABASE_URL" -f skills/universal/data-sql-optimization/scripts/pg_slow_query_triage.sql

# Collect estimated plans for reviewed queries (default):
python scripts/explain_collector.py --queries queries.txt --no-analyze --output plans.jsonl

# Collect actual plans (executes queries — review side effects first):
DATABASE_URL=postgresql://user:pass@test-db:5432/db \
  python scripts/explain_collector.py --queries queries.txt --analyze --output plans.jsonl
必要なことまず確認するもの使用する場面
遅いクエリのトリアージtemplate-slow-query.md変更を加える前に、安全な情報収集を行う必要がある場合
プランのレビューreferences/explain-analysis.mdEXPLAIN、EXPLAIN ANALYZE、Query Store、または Performance Schema の情報をすでに取得している場合
インデックスの設計または削除references/index-patterns.mdインデックスの追加、再構成、不可視化、または削除を検討している場合
クエリの書き換えreferences/query-tuning-patterns.mdクエリの形状または推定の問題がボトルネックと考えられる場合
接続の飽和references/connection-pooling-patterns.mdアプリケーションのプール、PgBouncer、RDS Proxy、Supavisor、または Cloud SQL のプーリングが関係する場合
モニタリングとアラートreferences/monitoring-alerting-patterns.mdデータベースパフォーマンスのダッシュボード、ベースライン、またはアラートが必要な場合
ロック/デッドロックtemplate-lock-analysis.md問題がクエリ自体のコストではなく、ブロッキング、デッドロック、または長時間のトランザクションにある場合
パーティショニングreferences/partition-strategies.mdデータ保持、プルーニング、またはテーブルの増加に応じた変更が必要な場合
バックアップとリカバリの設計references/recovery-strategy-design.md単なるバックアップジョブではなく、障害シナリオに対応したリカバリ機能が必要な場合
セキュリティまたは RLS のレビューtemplate-security-audit.md最小権限、SQL インジェクション対策、またはテナント分離をレビューする場合

対応エンジン

エンジン状態備考
PostgreSQL主要対応最も幅広く対応しています。ここで使用するバージョン依存機能(スキップスキャン、AIO、uuidv7()、pg_upgrade後も保持される統計情報)は、PostgreSQL 18で導入されました
MySQL主要対応本番環境ではInnovationリリースではなく、LTS系列を推奨します。その実行計画を信頼する前に、ユーザーのバージョンでHyperGraphオプティマイザーがデフォルトで有効になっているか確認してください
SQL Server主要対応実行計画のリグレッションにはQuery Storeを使用してください。IQP機能は、リリース要件と互換性要件がそれぞれ異なります。推奨する前に、該当機能の正確な要件をMicrosoftの機能マトリックスで確認してください
Oracle二次対応オプティマイザー固有のエッジケースには、テンプレートと公式ドキュメントを使用してください
SQLite二次対応インデックス、プランナーの動作、WAL、PRAGMA optimizeに重点を置いてください

バージョンの確認:まずSELECT version()(または@@version)でユーザーの正確なバージョンを確認してください。最新のマイナーリリースは data/versions.json(postgresql、mysql)に記載されており、スクリプトで更新されます。サポート対象のメジャーバージョンやLTS系列、およびそれぞれのサポート終了時期については、ベンダーのバージョン管理またはサポートポリシーのページを確認してください。使用中の系列がEOLに達する前にアップグレードを計画してください。より新しいメジャーバージョンの機能を推奨する前に、そのメジャーバージョンがGAであることをリリースノートで確認してください。本番環境向けにベータ版のみの機能を推奨してはいけません。

初回応答チェックリスト

変更を推奨する前に、次の情報を収集してください。

  1. データベースエンジンと正確なバージョン
  2. クエリテキストまたはワークロードの形態
  3. 関連するスキーマ、インデックス、推定行数
  4. 実際の証拠:実行計画の出力、待機統計、クエリ統計、またはエラーテキスト
  5. 最近の変更:スキーマ、設定、デプロイ、トラフィックの急増、またはデータの偏り
  6. 並行処理の状況:アプリケーションプール、サーバープーラー、レプリカのトポロジー
  7. 成功指標:p95レイテンシー、CPU、読み取り、ロック時間、エラー率、または接続数

これらの情報が不足している場合は、本番環境の変更を提案する前に、追加情報を求めるか、受付テンプレートを使用してください。

EXPLAIN 主導の診断チェックリスト

推定プランから始めます。ステートメント、関数、トリガーを確認してから、実行プランの取得を行ってください。ANALYZE は実際に実行され、ロールバックしてもシーケンスの変更や外部への影響は取り消されません。コレクターはステートメントごとに1行を受け付けますが、リテラルやコメント内も含め、内部セミコロンは拒否します。

-- PostgreSQL: estimated plan first; opt into ANALYZE for reviewed execution
EXPLAIN (VERBOSE, FORMAT TEXT) <query>;

-- MySQL: get JSON plan for detailed cost breakdown
EXPLAIN FORMAT=JSON <query>;

-- SQL Server: turn on I/O and CPU evidence
SET STATISTICS IO, TIME ON;
<query>;
手順確認事項危険信号
1オペレーターの時間とループ数親の時間には子の処理も含まれます。合計したり、コスト単位をミリ秒として扱ったりしないでください
2推定行数と実際の行数いずれかの方向で比率が10倍を超える
3ループ数 × ループあたりの行数 = 処理された行数の合計1ループあたりの処理が軽く見えても、合計が多い
4共有バッファのヒット数と読み取り数(PostgreSQL)高頻度クエリで reads が hits を大幅に上回る
5ソートまたはハッシュのスピルSort Method: external merge、Hash Batches > 1
6ホットパスでのキー/ブックマーク検索親行ごとに多数発生する場合は、INCLUDE 列を追加する
7ネステッドループの外側の行数 × 内側の処理量結合方式を選ぶ前に、推定値と内側スキャンの繰り返しを確認する
8待機時間 ≫ 実行時間プランではなく、ロックまたはプールの飽和を調査する

ボトルネックの判断表:

プランに表示される内容考えられる原因最初に試す対策
シーケンシャルスキャン、読み取り行数/返却行数が多いインデックスがない/使用できない、または妥当なスキャン方式選択性と検索可能性を確認し、インデックスを試した場合と比較する
インデックススキャンだがループ数が多いN+1 または不適切な結合順序バッチ処理にするか、推定を修正する
実際の行数 ≫ 推定行数統計情報が古い/不十分ANALYZE、CREATE STATISTICS(PG)、ヒストグラム(MySQL)
パラメーターによってプランが変わるパラメーター感度Query Store / OPPO(SQL Server)、クエリ形状の分離
ソートのスピル射影が広すぎる、または順序に合ったインデックスがない射影を絞り、カバリングインデックスを追加する
プランは軽いのに実時間が遅いロック、I/O、プールによる待機pg_stat_activity、待機イベント、プール統計を確認する

ワークフロー

  1. 変更を提案する前に、エンジン、ワークロード、症状、利用可能な根拠を確認します。
  2. SQL チューニングが主な問題ではない場合は、検索、レイクハウス、バックエンドアーキテクチャ、またはオブザーバビリティを主とする作業を、隣接するスキルに引き継ぎます。
  3. インデックス、書き換え、設定変更を提案する前に、プラン、統計情報、ワークロードの状況を収集します。
  4. 一度に変更する対策は1つにし、各手順の後に正確性とパフォーマンスへの影響を確認します。
  5. 最終的な推奨事項を提示する前に、ナビゲーションの参照先を使ってバージョン依存の動作を再確認します。
本番環境への変更ゲート

実施する変更に応じて、検証方法とロールバック方法を選びます。

変更試行方法ロールバックの条件ロールバック方法
クエリの書き換え代表的なパラメーターと並行処理数でリプレイし、結果セットを比較する行が誤っている、または p95/読み取り数/ロックが悪化するクエリを元に戻すか、機能フラグを戻す
新しいインデックス利用可能な場合はエンジンのオンライン/並行処理方式で構築し、選択されたプランを確認する書き込みレイテンシー、ロック時間、またはストレージ使用量が予算を超える依存先を確認した後、安全なオンライン方式で削除する
統計情報の変更偏りのある値について変更前後のプランを取得する別のパラメーター分類で性能が低下する対象の設定/統計情報を元に戻して分析する
プール/設定の変更1つのサービスまたはプールでカナリアを実施し、待機と飽和を監視するキューイング、タイムアウト、または接続の入れ替わりが増える以前の値に戻し、影響を受けたプールのみを再生成する
パーティション/スキーマの変更本番環境に近いデータでリハーサルし、二重読み取り/書き込みを検証する行数の不一致、書き込みのブロック、またはレプリケーション遅延切り替えを中止し、トラフィックを旧経路に戻す

ウォームキャッシュでの1回の実行だけを根拠に、チューニングが成功したと判断しないでください。同じワークロードの期間について、正確性、p50/p95/p99、論理/物理読み取り数、CPU、ロック、書き込みへの影響を記録し、測定できなかった指標があれば明記します。

ルーティングガイド

問題がクエリの遅さである場合

問題がカーディナリティまたは推定器のずれである可能性が高い場合

問題がインデックス設計である場合

問題がブロッキングまたはロック待ちである場合

  • template-lock-analysis.md を使用します
  • 設定を変更する前に、トランザクション構造の修正を優先します

問題が接続の逼迫である場合

  • references/connection-pooling-patterns.md を使用します
  • 接続ヘルパーと実際のプーラーを区別します。Cloud SQL Auth Proxy と言語コネクターは、それ自体ではプーラーではありません。

依頼が PostgreSQL のテナント分離または権限レビューに関する場合

ナビゲーションとテンプレート

対応する判断を記録する場合にのみ、エンジン横断のワークシートを読み込みます。

判断テンプレート
複数症状があるインシデントの診断診断
書き換えと結果の同等性のレビュークエリのチューニング
新しいスキーマまたは整合性のレビュースキーマ設計
ベースライン、実験、検証の記録チューニングワークシート
エンジン横断の実行計画レビューの記録EXPLAIN 分析
インデックスの試行と書き込みへの影響の記録インデックス設計
スキーマのロールアウトとロールバックのリハーサルマイグレーション
リカバリーのリハーサルと復元データの検証バックアップ/リストア
レプリケーショントポロジー、ラグ、フェイルオーバーの計画MySQL レプリケーション/HA、PostgreSQL レプリケーション/HA
組み込み SQLite のワークロードのチューニングSQLite の最適化

リファレンスガイド — 必要に応じて読み込みます。

  • references/explain-analysis.md — EXPLAIN/EXPLAIN ANALYZE の出力(行数の推定、結合順序、メモリへのスピル、エンジンごとの取得コマンド)を読み取るときに読み込みます。
  • references/index-patterns.md — インデックスの追加、再構成、廃止を判断するときに読み込みます。複合、部分、カバリング、BRIN、不可視インデックス、PG18 のスキップスキャンを扱います。
  • references/query-tuning-patterns.md — 有力な修正箇所が SQL 自体にある場合に読み込みます。SARGability、OR の書き換え、キーセットページネーション、N+1 の解消、推定の修正を扱います。
  • references/sql-best-practices.md — ワークロードに基づくチューニングのデフォルト設定と安全な変更のワークフローを確認するときに読み込みます。本番環境を変更する前に役立ちます。
  • references/sql-antipatterns.md — スキーマまたはクエリのコードレビューで、一般的なアンチパターン(SELECT *、N+1、EAV、非 SARGable な述語)を検出し、修正するときに読み込みます。
  • references/query-optimization-research-runtime.md — 推奨事項がバージョン固有のエンジン動作(PG18 AIO、MySQL HyperGraph、SQL Server 2025 IQP、LITHE の書き換えに関する研究)に依存するときに読み込みます。
  • references/partition-strategies.md — テーブルの増加、保持期間、または VACUUM の負荷を理由にパーティショニングを検討するときに読み込みます。マイグレーションパターンと pg_partman のガイダンスを含みます。
  • references/connection-pooling-patterns.md — 症状が接続の飽和、プール管理ツールの設定ミス、またはクラウド管理型プールの選定(PgBouncer、RDS Proxy、Supavisor、Cloud SQL)であるときに読み込みます。
  • references/monitoring-alerting-patterns.md — PostgreSQL、MySQL、SQL Server のクエリ統計、待機イベントの監視、アラートしきい値を設定するときに読み込みます。
  • references/operational-patterns.md — 本番環境のチューニングワークフロー、安全なマイグレーションのチェックリスト、エンジン固有の運用上の注意、work_mem のサイジング、トランザクション内でアイドル状態の接続が引き起こすロックの連鎖、オンラインスキーマ変更ツール(gh-ost と pt-osc)の確認に読み込みます。
  • references/recovery-strategy-design.md — バックアップとリカバリーを設計またはレビューするときに読み込みます。障害シナリオの分類、障害クラスごとの検知、ストレージ階層化、成果物としてのリカバリーテストを扱います。

一次資料は data/sources.json にあります。

既知の落とし穴

  • シーケンシャルスキャン、ハッシュ結合、マテリアライズ、サブクエリ、CTEが正しい選択肢である場合もあります。書き換える前に、実行計画で根拠を確認してください。
  • インデックスを追加するたびに、書き込みとメンテナンスの負荷が増えます。重複するインデックスがないか確認し、読み取りの改善と併せて書き込みへの影響も測定してください。
  • 開発環境のデータでは、本番環境の偏りやテナントごとの負荷集中が見えません。同時実行時に、代表的なパラメーターを比較してください。
  • プランナーヒントやセッション設定は、クエリ、スキーマ、統計情報を確認した後の診断用の実験です。エンジン間でヒントを使い回さないでください。

関連スキル

学びの記録

過去の判断や落とし穴が関係する場合は、learnings.consolidated.md があれば参照してください。必要な履歴を確認するとき、または他に利用できる資料がない場合に限り、learnings.md を使用してください。それ以外の場合は、どちらも参照しないでください。

適用後、記録しておく価値のあるパターン、再発を防ぐべきミス、または意外なドメイン知識に遭遇した場合は、agents-skills-feedback-loop/scripts/append_learning.py を使って、日付入りの箇条書きを1つ learnings.md に追記してください。SKILL.md 自体は変更しないでください。

コメント