Communityライティング&編集github.com

tablestudioapp/plugins

TableStudioを使用して遅いデータベースクエリを特定・修正し、各修正を測定値で証明し、データベース全体の健全性をチェックします。クエリ、ページ、エンドポイントが遅い場合、どのクエリが遅いか、データベースの何が問題かと聞かれた場合、インデックスの追加・レビュー・削除を行う場合、ORMクエリのチューニングが必要な場合、SQLの書き換えが高速か判断する場合に使用します。

plugins とは?

このスキルは、TableStudioツール群を活用してデータベースクエリのパフォーマンスを計測・改善するための包括的なガイドです。直感ではなく測定値に基づいたインデックス推奨やクエリ書き換えを可能にし、PostgreSQLを主対象としますが、他のエンジンでも`explain_query`と実行計画の分析を利用できます。具体的には、`slow_queries`で遅延クエリの特定、`optimize_query`と`explain_query`で単一ステートメントの診断、`benchmark_query_variants`(Query Lab)で変更前後の性能比較と結果の同一性検証を行います。また、`database_health`や`schema_issues`でデータベース全体の健全性チェックを実施し、改善案は測定値を根拠に提案し、変更はマイグレーションツールや`stage_migration`を通じて安全に適用します。インデックス削除前には`index_what_if`で影響を確認し、PostgreSQLでは`CREATE INDEX CONCURRENTLY`を推奨するなど、実運用を考慮した手順が特徴です。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/tablestudioapp/plugins/tree/HEAD/tablestudio/skills/query-performance

Installed? Explore more ライティング&編集 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

TableStudioでクエリを高速化する

TableStudioは、推測ではなく測定できます。以下ツールで証明できるのに、直感でインデックスや書き換えを推奨しないでください。これらはほとんどがPostgreSQL専用です。他のエンジンではexplain_queryを使用し、実行計画から推論してください。

まず、データベースワークフロースキルに従って接続を選択します。現実的なデータを持つデータベースに対して分析を実行することを推奨します。ほぼ空の開発データベースは誤解を招く実行計画を生成します。

遅い箇所を見つける

  • ユーザーがクエリまたはエンドポイントを指定した場合: 実行されるSQLを(コードまたはORMのログから)見つけ、「単一ステートメントの診断」に進みます。
  • 「データベースが遅いのはなぜ?」: slow_queriesを呼び出します。これはpg_stat_statementsから総時間でステートメントをランク付けします。各行のquery_idを保持しておいてください。他のツールがそれを受け入れます。拡張機能がインストールされていない場合、ツールは有効化に必要な手順を説明するので、求めずにインストールするのではなく、その情報を伝えてください。
  • 広範なチューニング: workload_index_advisorは、最も多くのデータベース時間をカバーする最小限のインデックスを見つけ、使用されていない既存のインデックスをリストします。

健全性チェック

ユーザーがデータベースの問題を尋ねたり、全般的なレビューを求めてきた場合、何も変更せずに以下を報告します。

  1. database_health。そのunavailableリストを要約より先に読んでください。エントリがあるのに空の検出結果は、すべてが正常であることを意味するのではなく、チェックがスキップされたことを意味します。
  2. database_overview:サイズ、最大かつ最もビジーなテーブル、および接続数。
  3. schema_issues(tableなし):データベース全体の設計上の問題。

最も重要な検出事項をわかりやすい言葉で最初に配置します。何が問題か、無視した場合のコスト、修正方法。各検出事項のverify_sqlを含め、ユーザーが数値を確認できるようにし、修正がある場合はそのlock_impactも含めます。ユーザーが選択した修正を以下の「Ship it」を通じて適用することを提案します。

単一ステートメントの診断

  1. optimize_queryにSQL(およびslow_queriesから来た場合はquery_id)を渡します。読み取り専用ステートメントの場合は、analyze: trueを渡して測定チェックを実行できるようにします。これはロールバックトランザクション内で1回実行されます。already_fastを報告した場合は、何もする価値がないことを意味します。そのように伝え、改善をでっち上げないでください。
  2. 詳細が必要な場合は、explain_queryを使用します(読み取り専用の場合はanalyze: true)。各ノードのactual_rowsとestimated_rowsを比較します。大きな差は古い統計(テーブルをANALYZE)を示しており、多くの場合、欠落したインデックスではなく、これが実際のバグです。
  3. $1, $2プレースホルダーを持つステートメントは、適切に計画するために実際の値が必要です。suggest_parameter_valuesは、履歴、ライブセッション、統計からそれらを見つけます。

修正を証明する

何かを推奨する前に、benchmark_query_variants(クエリラボ)を使用します。

  • ベースラインのSQLと、variantsとして候補(書き換えたsql、hypothetical_indexes(hypopgで計画され、決して構築されない)、hide_indexes、またはプランナーsettings)を渡します。またはvariantsを省略してfind_fasterに独自の提案を任せます。
  • 各パラメータセットに対していくつかの実行の中央値を報告し、すべての書き換えがベースラインと同じ行を返すことを確認します。
  • same_rowsがyesのバリアントのみを推奨します。recommendation内のバリアントを優先します。測定された前後の値を引用し、直感に基づくパーセンテージは使用しません。

インデックスを削除する前(未使用または重複)に、index_what_ifをhideでそのインデックスを指定して実行します。コストが高くなるステートメント、または現在そのインデックスを使用しているステートメントがあれば、影響を受けます。

出荷する

インデックスと書き換えは、データベースワークフロースキルの通常の変更フローを通じて行われます。

  • インデックス変更はスキーマ変更です。リポジトリにマイグレーションツールがある場合は、そこにインデックスを追加します。それ以外の場合は、stage_migrationを使用して提案し、rationaleに測定値を含めます。
  • PostgreSQLでは、トラフィックのあるテーブルにはCREATE INDEX CONCURRENTLYを使用し、トランザクションでラップしないでください。
  • クエリ書き換えはコード変更です。それを発行するコードを編集し、サマリーにベンチマーク結果を記載します。

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

関連スキル