django-query-profiling について
Django 開発者が、報告された遅延を特定の QuerySet、SQL 文、再現可能な状況まで追跡するためのスキルです。本番環境の証拠収集、コードとの対応付け、ローカルでの再現を組み合わせ、適切な修正につなげます。
主な機能
- 01ユーザーに見える遅い経路の記録
- 02トレースとクエリ証拠の収集
- 03SQL と Django コードの対応付け
- 04代表的なデータでの再現
- 05調査結果に応じた修正先の案内
活用シーン
- 01遅い API アクションの調査
- 02遅いページの原因となる SQL の特定
- 03バックグラウンドタスクの遅延再現
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ lvtd-llc/ skills --skill django-query-profilingインストール後、Claude Code で/django-query-profilingを入力して読み込まれたか確認します。
同梱ファイルreferences/tooling-and-reproduction.md
詳細
Django クエリのプロファイリング
このスキルを使うと、曖昧な Django の遅さに関する報告を、具体的なクエリセット、SQL 文、再現可能なシナリオに落とし込めます。
ワークフロー
-
ユーザーに見える遅い処理から始めます。
- URL、API アクション、バックグラウンドタスク、管理コマンド、またはレポートを記録します。
- リクエストパラメーター、ユーザーまたはテナントの構成、ページネーションの状態、データ量を把握します。
-
本番環境またはステージング環境の証拠を収集します。
- 利用できる場合は、APM のトランザクショントレースを優先します。
- Python の処理とは独立して遅い SQL には、データベースのスロークエリログを使います。
- ローカル開発環境のサーバー描画ページには、Django Debug Toolbar を使います。
- API やジョブでは、疑わしい処理ブロックの周辺に対象を絞ったクエリログを追加します。
-
SQL を Django のコードに対応づけます。
- モデルのテーブル名とカラム名を検索します。
- ビューの
get_queryset()、シリアライザーフィールド、テンプレートのループ、マネージャー、モデルプロパティ、シグナルハンドラーを調べます。 - 最初のクエリセットが評価された後に、関連オブジェクトへアクセスしていないか確認します。
-
ローカル環境または安全なシェルで再現します。
- 可能であれば、本番環境に近い行数を使います。
- 測定時には、無関係な計測機能やデバッグ専用のミドルウェアを無効にします。
- 遅い処理を実行する、繰り返し使えるスクリプト、テスト、またはシェルスニペットを用意します。
-
修正方法を振り分けます。
- クエリ数の問題:
django-orm-query-optimizationを使います。 - 1 つの遅い SQL 文:
django-query-plan-readingを使います。 - 大規模なループや書き込み:
django-queryset-batch-processingを使います。
- クエリ数の問題:
具体的なプロファイリング用スニペットと注意点については、tooling-and-reproduction.md を参照してください。
有効な証拠
- 対象の処理におけるクエリ数の修正前と修正後の値。
- 遅い SQL、または正規化された SQL フィンガープリント。
- SQL の発生箇所を説明するスタックまたはコードへの参照。
- 同じ環境で、代表的なデータ構成を使って測定した時間。
検証
推測だけでプロファイリングを終えないでください。名前を特定したクエリセット、コードパス、そして別のエージェントが再実行できるコマンドまたはリクエストを示して完了してください。
コメント
Markdown 対応