Agent Skills by ALSEL
Anthropic Claudeデータ・分析⭐ リポ 0品質スコア 50/100

neon-postgres-egress-optimizer

Postgresの過剰なネットワーク転送(egress)を診断・修正するスキルです。Neonの請求額が急増した、データ転送コストが予想外に高い、`SELECT *`による過剰フェッチを最適化したいといった場合に使用します。ユーザーがegressやデータ転送を明示しなくても、クエリパターンのコスト効率レビューが必要な場面でも自動的に適用されます。

description の原文を見る

>- Diagnose and fix excessive Postgres egress (network data transfer) in a codebase. Use when a user mentions high database bills, unexpected data transfer costs, network transfer charges, egress spikes, "why is my Neon bill so high", "database costs jumped", SELECT * optimization, query overfetching, reduce Neon costs, optimize database usage, or wants to reduce data sent from their database to their application. Also use when reviewing query patterns for cost efficiency, even if the user doesn't explicitly mention egress or data transfer.

SKILL.md 本文

Postgres Egress Optimizer

アプリケーション側のクエリパターンを診断・修正し、Postgres データベースからの過度なデータ転送(エグレス)を解決します。高額なエグレス請求のほとんどは、アプリケーションが使用するより多くのデータを取得していることが原因です。

Step 1: 診断

どのクエリが最もデータを転送しているかを特定します。主なツールは pg_stat_statements 拡張機能です。

pg_stat_statements が利用可能かどうかを確認

SELECT 1 FROM pg_stat_statements LIMIT 1;

エラーが発生した場合は、拡張機能を作成する必要があります:

CREATE EXTENSION IF NOT EXISTS pg_stat_statements;

Neon ではデフォルトで利用可能ですが、この CREATE EXTENSION ステップが必要な場合があります。

統計情報が空の場合の対応

Neon コンピュートがゼロにスケールダウンして再起動すると、統計情報がクリアされます。統計情報が空または最近コンピュートが起動した場合:

  1. 統計情報をリセットして、新しい測定期間を開始します: SELECT pg_stat_statements_reset();
  2. アプリケーションを代表的なトラフィック環境で少なくとも 1 時間実行します。
  3. 戻って、以下の診断クエリを実行します。

ユーザーが本番データベースから統計情報を取得している場合は、それを使用します。本番統計情報へのアクセスがない場合は、Step 2 に進んでコードベースを直接分析してください — コードレベルのパターン分析は、問題のあるクエリを特定するのに十分なことが多いです。

診断クエリ

これらを実行して、エグレスに最も貢献しているクエリを特定します。多くの行を返すクエリ、幅広い行(JSONB、TEXT、BYTEA カラム)を返すクエリ、または非常に頻繁に呼ばれるクエリに焦点を当てます。

最も多くの総行数を返すクエリ:

SELECT query, calls, rows AS total_rows, rows / calls AS avg_rows_per_call
FROM pg_stat_statements
WHERE calls > 0
ORDER BY rows DESC
LIMIT 10;

実行ごとに最も多くの行を返すクエリ(スコープが不適切な SELECT、ページネーション欠落):

SELECT query, calls, rows AS total_rows, rows / calls AS avg_rows_per_call
FROM pg_stat_statements
WHERE calls > 0
ORDER BY avg_rows_per_call DESC
LIMIT 10;

最も頻繁に呼ばれるクエリ(キャッシング候補):

SELECT query, calls, rows AS total_rows, rows / calls AS avg_rows_per_call
FROM pg_stat_statements
WHERE calls > 0
ORDER BY calls DESC
LIMIT 10;

実行時間が最も長いクエリ(直接的なエグレス測定ではありませんが、スパイク時の問題クエリの特定に役立ちます):

SELECT query, calls, rows AS total_rows,
  round(total_exec_time::numeric, 2) AS total_exec_time_ms
FROM pg_stat_statements
WHERE calls > 0
ORDER BY total_exec_time DESC
LIMIT 10;

結果の解釈

推定エグレス影響度で結果をランク付けします:

  • 高い行数 + 幅広い行 = 最大のエグレス。1,000 行を返すクエリで、各行に 50KB の JSONB カラムが含まれる場合、呼び出しごとに約 50MB が転送されます。
  • 極度な呼び出し頻度は、小さなクエリでも蓄積します。1 日 50,000 回呼ばれるクエリで 10 行返す場合 = 1 日 500,000 行。
  • スキーマとの相互参照で幅広いカラムを特定します。JSONB、TEXT、BYTEA、および大きな VARCHAR カラムを探してください。

Step 2: コードベースの分析

Step 1 で特定された各クエリ、またはステップ 1 で統計情報が利用できない場合はコードベース内の各データベースクエリについて、以下をチェックします:

  • レスポンスが必要とするカラムのみを選択していますか?
  • 返される行数が制限されていますか(LIMIT/ページネーション)?
  • キャッシングの利点を得られるほど頻繁に呼ばれていますか?
  • 生データを取得して、アプリケーションコードで集約していますか?
  • 親データを子行全体に複製する JOIN を使用していますか?

Step 3: 修正

見つかった各問題に対して、適切な修正を適用します。以下は、最も一般的なエグレスアンチパターンと修正方法です。

未使用カラム(SELECT *)

問題: クエリはすべてのカラムを取得しますが、アプリケーションはいくつかのみを使用します。大きなカラム(JSONB ブロブ、TEXT フィールド)がネットワーク経由で転送され、破棄されます。

修正前:

SELECT * FROM products;

修正後:

SELECT id, name, price, image_urls FROM products;

ページネーションの欠落

問題: リストエンドポイントが LIMIT なしですべての行を返します。これは無制限のエグレスリスク — テーブル内の新しい行が増えるたびに、すべてのリクエストでデータ転送が増加します。現在のテーブルサイズに関わらず、これにフラグを付けてください。

アプリケーションは小さなデータセットでは正常に動作するため、見落としやすいです。しかしスケールでは、ページネーションなしのエンドポイントが 10,000 行を中程度のカラム幅で返すと、1 日あたり数百メガバイト転送する可能性があります。

修正前:

SELECT id, name, price FROM products;

修正後:

SELECT id, name, price FROM products
ORDER BY id
LIMIT 50 OFFSET 0;

ページネーションを追加するときは、消費クライアントがすでにページネーション付きレスポンスをサポートしているかどうかを確認します。そうでない場合は、適切なデフォルトを選択し、API のページネーションパラメータをドキュメント化します。

静的データに対する高頻度クエリ

問題: クエリが 1 日に数千回呼ばれていますが、データはほとんど変わりません。呼び出しのたびに同じ行がデータベースから転送されます。このパターンは pg_stat_statements からのみ見えます — コード自体は正常に見えます。

他のクエリと比べて呼び出し回数が極度に高いクエリを探してください。一般的な例: 設定テーブル、カテゴリリスト、フィーチャーフラグ、ユーザーロール定義。

修正: アプリケーションとデータベース間にキャッシングレイヤを追加して、すべてのリクエストでデータベースへのアクセスを避けます。

アプリケーション側の集約

問題: アプリケーションがテーブルのすべての行を取得してから、アプリケーションコード内で集約(平均、カウント、合計、グループ化)を計算します。結果は小さな概要であるにもかかわらず、完全なデータセットがネットワーク経由で転送されます。

修正: 集約を SQL にプッシュします。

修正前: アプリケーションがテーブル全体を取得してコード内でループや .reduce() で集約します。

修正後:

SELECT p.category_id,
       AVG(r.rating) AS avg_rating,
       COUNT(r.id) AS review_count
FROM reviews r
INNER JOIN products p ON r.product_id = p.id
GROUP BY p.category_id;

JOIN の重複

問題: 幅広い親テーブルと子テーブル間の JOIN は、すべての親カラムを子行全体に複製します。製品に 200 件のレビューがあり、製品行に 50KB の JSONB カラムが含まれている場合、JOIN はその 50KB × 200 = 単一のリクエストで約 10MB を送信します。

これは SELECT * の問題とは異なります。選択するカラムが必要なもののみであっても、JOIN は親データをすべての子行で繰り返します。修正は構造的です: JOIN 全体を避けます。

修正前:

SELECT * FROM products
LEFT JOIN reviews ON reviews.product_id = products.id
WHERE products.id = 1;

修正後(2 つの個別クエリ):

SELECT id, name, price, description, image_urls FROM products WHERE id = 1;
SELECT id, user_name, rating, body FROM reviews WHERE product_id = 1;

1 つの JOIN ではなく 2 つのクエリ。製品データは 1 度だけ取得されます。レビューは 1 度だけ取得されます。重複はありません。

Step 4: 検証

修正を適用した後:

  1. 既存テストを実行 — 何も壊れていないことを確認します。
  2. レスポンスをチェック — API がまだ同じデータ形状を返すことを確認します。カラム選択とページネーション変更は、特定のフィールドまたは完全な結果セットに依存するクライアントを破損させる可能性があります。
  3. 改善を測定 — pg_stat_statements データが利用できる場合は、リセットしてください(SELECT pg_stat_statements_reset();)、トラフィックを実行してから診断クエリを再実行して修正前後を比較します。

さらに読む

ライセンス: Apache-2.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
neondatabase
リポジトリ
neondatabase/agent-skills
ライセンス
Apache-2.0
最終更新
不明

Source: https://github.com/neondatabase/agent-skills / ライセンス: Apache-2.0

関連スキル

OpenAIデータ・分析⭐ リポ 1,451

hugging-face-trackio

Trackioを使用してMLトレーニング実験を追跡・可視化できます。トレーニング中のメトリクスログ記録(Python API)、トレーニング診断のアラート発火、ログされたメトリクスの取得・分析(CLI)が必要な場合に活用してください。リアルタイムダッシュボード表示、Webhookを使用したアラート、HF Space同期、自動化向けのJSON出力に対応しています。

by gradio-app
汎用データ・分析⭐ リポ 855

btc-bottom-model

ビットコインのサイクルタイミングモデルで、加重スコアリングシステムを搭載しています。日次パルス(4指標、32ポイント)とウィークリー構造(9指標、68ポイント)の2カテゴリーにわたる13の指標を追跡し、0~100のマーケットヒートスコアを算出します。ETFフロー、ファンディングレート、ロング/ショート比率、恐怖・貪欲指数、LTH-MVRV、NUPL、SOPR(LTH+STH)、LTH供給率、移動平均倍率(365日MA、200週MA)、週次RSI、出来高トレンドに対応します。市場サイクル全体を通じて買いと売りの両方の推奨を提供します。ビットコインの底値拾い、BTCサイクルポジション、買い時・売り時、オンチェーン指標、MVRV、NUPL、SOPR、LTH動向、ETFの流出入、ファンディングレート、恐怖指数、ビットコインが過熱状態か、マイナーコスト、暗号資産市場のセンチメント、BTCのポジションサイジング、「今ビットコインを買うべきか」「BTCが天井をつけているか」「オンチェーン指標は何を示しているか」といった質問の際にこのスキルを活用します。

by star23
Anthropic Claudeデータ・分析⭐ リポ 380

protein_solubility_optimization

タンパク質の溶解性最適化 - タンパク質の溶解性を最適化します。タンパク質の特性を計算し、溶解性と親水性を予測し、有効な変異を提案します。タンパク質配列の特性計算、タンパク質機能の予測、親水性計算、ゼロショット配列予測を含むタンパク質エンジニアリング業務に使用できます。3つのSCPサーバーから4つのツールを統合しています。

by SpectrAI-Initiative
Anthropic Claudeデータ・分析⭐ リポ 1,743

research-lookup

Parallel Chat APIまたはPerplexity sonar-pro-searchを使用して、最新の研究情報を検索できます。学術論文の検索にも対応しています。クエリは自動的に最適なバックエンドにルーティングされるため、論文の検索、研究データの収集、科学情報の検証に活用できます。

by K-Dense-AI
Anthropic Claudeデータ・分析⭐ リポ 299

tree-formatting

ggtree(R)またはiTOL(ウェブ)を使用して、系統樹の可視化とフォーマットを行います。系統樹を図として描画する際、ツリーレイアウトの選択、分類学に基づく枝やラベルの色付け、クレードの折りたたみ、サポート値の表示、またはツリーへのオーバーレイ追加が必要な場合に使用してください。系統推定(protein-phylogenyスキルを使用)やドメイン注釈(今後の独立したスキル)には使用しないでください。

by majiayu000
汎用データ・分析⭐ リポ 145

querying-indonesian-gov-data

インドネシア政府の50以上のAPIとデータソースに接続できます。BPJPH(ハラール認証)、BOM(食品安全)、OJK(金融適正性)、BPS(統計)、BMKG(気象・地震)、インドネシア中央銀行(為替レート)、IDX(株式)、CKAN公開データポータル、pasal.id(第三者法MCP)に対応しています。インドネシア政府データを活用したアプリ開発、.go.idウェブサイトのスクレイピング、ハラール認証の確認、企業の法的適正性の検証、金融機関ステータスの照会、またはインドネシアMCPサーバーへの接続時に使用できます。CSRF処理、CKAN API使用方法、IP制限回避など、すぐに実行可能なPythonパターンを含んでいます。

by suryast
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: neondatabase · neondatabase/agent-skills · ライセンス: Apache-2.0