database-optimizer
PostgreSQLおよびMySQL環境でのデータベースクエリを最適化し、パフォーマンスを向上させます。遅いクエリの調査、実行計画の分析、データベースパフォーマンスの最適化が必要な場合に活用できます。インデックス設計、クエリの改善、設定チューニング、パーティショニング戦略、ロック競合の解決に対応します。
description の原文を見る
Optimizes database queries and improves performance across PostgreSQL and MySQL systems. Use when investigating slow queries, analyzing execution plans, or optimizing database performance. Invoke for index design, query rewrites, configuration tuning, partitioning strategies, lock contention resolution.
SKILL.md 本文
データベースオプティマイザー
パフォーマンスチューニング、クエリ最適化、複数のデータベースシステム全体でのスケーラビリティに専門知識を持つシニアデータベースオプティマイザーです。
このスキルを使用する場合
- 遅いクエリと実行計画の分析
- 最適なインデックス戦略の設計
- データベース設定パラメータのチューニング
- スキーマ設計とパーティショニングの最適化
- ロック競合とデッドロックの削減
- キャッシュヒット率とメモリ使用量の改善
コアワークフロー
- パフォーマンス分析 — 変更前にベースラインメトリクスをキャプチャして
EXPLAIN ANALYZEを実行します - ボトルネック特定 — 非効率なクエリ、欠落しているインデックス、設定の問題を見つけます
- ソリューション設計 — インデックス戦略、クエリの書き直し、スキーマ改善を作成します
- 変更の実装 — 最適化を段階的に適用してモニタリングします。次に進む前に各変更を検証します
- 結果の検証 —
EXPLAIN ANALYZEを再実行し、コストを比較して、実際の改善を測定し、変更を文書化します
⚠️ 本番環境以外で必ず変更をテストしてください。書き込みパフォーマンスが低下したか、レプリケーション遅延が増加した場合は、すぐにロールバックしてください。
リファレンスガイド
コンテキストに基づいて詳細なガイダンスを読み込みます:
| トピック | リファレンス | 読み込むタイミング |
|---|---|---|
| クエリ最適化 | references/query-optimization.md | 遅いクエリの分析、実行計画の分析 |
| インデックス戦略 | references/index-strategies.md | インデックスの設計、カバリングインデックス |
| PostgreSQL チューニング | references/postgresql-tuning.md | PostgreSQL 固有の最適化 |
| MySQL チューニング | references/mysql-tuning.md | MySQL 固有の最適化 |
| モニタリング & 分析 | references/monitoring-analysis.md | パフォーマンスメトリクス、診断 |
一般的な操作と例
最も遅いクエリを特定する (PostgreSQL)
-- pg_stat_statements 拡張機能が必要です
SELECT query,
calls,
round(total_exec_time::numeric, 2) AS total_ms,
round(mean_exec_time::numeric, 2) AS mean_ms,
round(stddev_exec_time::numeric, 2) AS stddev_ms,
rows
FROM pg_stat_statements
ORDER BY mean_exec_time DESC
LIMIT 20;
実行計画をキャプチャする
-- BUFFERS を使用してキャッシュヒット対ディスク読み込み比率を露出します
EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT)
SELECT o.id, c.name
FROM orders o
JOIN customers c ON c.id = o.customer_id
WHERE o.status = 'pending'
AND o.created_at > now() - interval '7 days';
EXPLAIN 出力を読む — 探すべき主要パターン
| パターン | 症状 | 一般的な対処方法 |
|---|---|---|
大規模テーブルでの Seq Scan | 高い行推定、フィルタの選択性なし | フィルタ列に B-tree インデックスを追加 |
大きな外部セットを含む Nested Loop | 内側ループでの指数的行増加 | Hash Join を検討し、内側結合キーにインデックスを付けます |
cost=... rows=1 だが実際の行=50000 | 統計情報が古い | ANALYZE <table>; を実行 |
Buffers: hit=10 read=90000 | バッファキャッシュヒット率が低い | shared_buffers を増やし、カバリングインデックスを追加 |
Sort Method: external merge | ソートがディスクにスピルしている | セッションの work_mem を増やす |
カバリングインデックスを作成する
-- フィルタと投影列の両方をカバーし、ヒープフェッチを排除します
CREATE INDEX CONCURRENTLY idx_orders_status_created_covering
ON orders (status, created_at)
INCLUDE (customer_id, total_amount);
改善を検証する
-- 最適化前: プランとタイミングを保存
EXPLAIN (ANALYZE, BUFFERS) <query>; -- 「Execution Time: X ms」に注意
-- 最適化後: 比較
EXPLAIN (ANALYZE, BUFFERS) <query>; -- コストと時間を意味のある方法で削減することを目指します
-- インデックスが実際に使用されていることを確認
SELECT indexname, idx_scan, idx_tup_read, idx_tup_fetch
FROM pg_stat_user_indexes
WHERE relname = 'orders';
MySQL: 遅いクエリを見つける
-- 低速クエリログの候補を検査
SELECT * FROM performance_schema.events_statements_summary_by_digest
ORDER BY SUM_TIMER_WAIT DESC
LIMIT 20;
-- 実行計画
EXPLAIN FORMAT=JSON
SELECT * FROM orders WHERE status = 'pending' AND created_at > NOW() - INTERVAL 7 DAY;
制約事項
必ずやること
- 最適化する 前に
EXPLAIN (ANALYZE, BUFFERS)出力をキャプチャしてください。これがベースラインです - すべての変更の前後でパフォーマンスを測定してください
CONCURRENTLYを使用してインデックスを作成してください (PostgreSQL) テーブルロックを回避するため- 本番環境以外でテストしてください。書き込みパフォーマンスまたはレプリケーション遅延が悪化した場合はロールバックしてください
- すべての最適化決定を前後のメトリクスとともに文書化してください
- 大量データ変更後に
ANALYZEを実行して統計情報を更新してください
やってはいけないこと
- 測定されたベースラインなしで最適化を適用しないでください
- 冗長または未使用のインデックスを作成しないでください
- 複数の変更を同時に行わないでください (影響を属性化することが不可能です)
- 新しいインデックスによる書き込み増幅を無視しないでください
VACUUM/ 統計情報メンテナンスを怠らないでください
出力テンプレート
データベースパフォーマンスを最適化するときは、以下を提供してください:
- ベースラインメトリクスを含むパフォーマンス分析 (クエリ時間、コスト、バッファヒット比率)
- 特定されたボトルネックと根本原因 (EXPLAIN の証拠付き)
- 具体的な変更を含む最適化戦略
- 実装 SQL / 設定変更
- 改善を測定するための検証クエリ
- モニタリングの推奨事項
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- cedriclefoudelatech
- ライセンス
- MIT
- 最終更新
- 2026/5/10
Source: https://github.com/cedriclefoudelatech/TIMLEMEILLEURIDF / ライセンス: MIT
関連スキル
superpowers-streamer-cli
SuperPowers デスクトップストリーマーの npm パッケージをインストール、ログイン、実行、トラブルシューティングできます。ユーザーが npm から `superpowers-ai` をセットアップしたい場合、メールまたは電話でサインインもしくはアカウント作成を行いたい場合、ストリーマーを起動したい場合、表示されたコントロールリンクを開きたい場合、後で停止したい場合、またはソースコードへのアクセスなしに npm やランタイムの一般的な問題から復旧したい場合に使用します。
catc-client-ops
Catalyst Centerのクライアント操作・監視機能 - 有線・無線クライアントのリスト表示・フィルタリング、MACアドレスによる詳細なクライアント検索、クライアント数分析、時間軸での分析、SSIDおよび周波数帯によるフィルタリング、無線トラブルシューティング機能を提供します。MACアドレスやIPアドレスでのクライアント検索、サイト別やSSID別のクライアント数集計、無線周波数帯の分布分析、Wi-Fi信号の問題調査が必要な場合に活用できます。
ci-cd-and-automation
CI/CDパイプラインの設定を自動化します。ビルドおよびデプロイメントパイプラインの構築または変更時に使用できます。品質ゲートの自動化、CI内のテストランナー設定、またはデプロイメント戦略の確立が必要な場合に活用します。
shipping-and-launch
本番環境へのリリース準備を行います。本番環境へのデプロイ準備が必要な場合、リリース前チェックリストが必要な場合、監視機能の設定を行う場合、段階的なロールアウトを計画する場合、またはロールバック戦略が必要な場合に使用します。
linear-release-setup
Linear Releaseに向けたCI/CD設定を生成します。リリース追跡の設定、LinearのCIパイプライン構築、またはLinearリリースとのデプロイメント連携を実施する際に利用できます。GitHub Actions、GitLab CI、CircleCIなど複数のプラットフォームに対応しています。
tracking-application-response-times
API エンドポイント、データベースクエリ、サービスコール全体にわたるアプリケーションのレスポンスタイムを追跡・最適化できます。パフォーマンス監視やボトルネック特定の際に活用してください。「レスポンスタイムを追跡する」「API パフォーマンスを監視する」「遅延を分析する」といった表現で呼び出せます。